我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue组件通信方法案例总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue组件通信方法案例总结

一、父组件向子组件传值(props)

步骤:

  1. 在父组件中通过 v-bind 将数据传给子组件
  2. 在子组件中通过 props 接收父组件传递过来的数据

<div id="app">
	<!-- 1.通过 v-bind 将数据传给子组件 -->
    <test v-bind:ss='name'></test>
</div>

<script>
    var a = new Vue({
        el:'#app',
        data:{
            name:'bing',
        },
        components: {
            test:{
                props: ['ss'],   // 2.接收父组件传递过来的数据
                template:"<p>{{ss}}</p>"
            }
        }
    })
</script>

props使得父子之间形成一种 单向数据流 ,父元素更新的时候,子元素的状态也会随之改变。
但反之会导致你的应用的数据流向难以理解,因此在子组件中不能修改父组件中的数据

二、子组件向父组件传值($emit)

子组件通过 $emit 事件向父组件发送消息,将自己的数据传递给父组件。

步骤:

  1. 在子组件上绑定一个 click 事件,触发 increment 方法
  2. increment 方法中用 $emit 定义一个自定义事件 increment ,同时传入 this.counter 参数
  3. 在父组件上绑定步骤2中自定义的 increment 事件,方法名为 incrementTotal
  4. 在父组件中调用步骤3中的 incrementTotal 方法,这时 incrementTotal 方法就能接收到子组件传入的参数

<div id="app">
    <p>{{ total }}</p>
    <button-counter v-on:increment="incrementTotal"></button-counter> <!-- 步骤3 -->
</div>

<script>
    Vue.component('button-counter', {
        template: '<button v-on:click="increment">{{ counter }}</button>', // 步骤1
        data: function () {
            return {
                counter: '子组件的数据'
            } 
        },
        methods: {
            increment: function () {
                this.$emit('increment', this.counter); // 步骤2
            }
        }
    });


    new Vue({
        el: '#app',
        data: {
            total: '父组件的数据:'
        },
        methods: {
            incrementTotal: function (e) { // 步骤4
                this.total = this.total + e[0]
                console.log(e);
            }
        }
    })
</script>

三、兄弟组件传值(EventBus)

如果不需要类似 Vuex 这样的库来处理组件之间的数据通信,就可以考虑Vue中的 事件总线(EventBus) 来通信。

在 Vue 中可以使用 EventBus 来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件。
但也就是太方便所以若使用不慎,就会造成难以维护的“灾难”,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。

这个方法是通过创建一个空的 vue 实例,当做 $emit 事件的处理中心(事件总线),通过他来触发以及监听事件,方便的实现了任意组件间的通信,包含父子,兄弟,隔代组件。具体如下:

1. 初始化(new Vue())

首先需要创建事件总线并将其导出,以便其它模块可以使用或者监听它。
我们可以通过两种方式来处理。

方法一: 新创建一个 event-bus.js 文件


// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()

方法二: 直接在项目中的 main.js 初始化 EventBus


// main.js
Vue.prototype.$EventBus = new Vue() // 注意:这种方式初始化的EventBus是一个全局的事件总线

现在我们已经创建了 EventBus ,接下来你需要做到的就是在你的组件中加载它,并且调用同一个方法,就如你在父子组件中互相传递消息一样。

2. 发送事件($emit())

假设有两个Vue页面需要通信: A 和 B 。A页面中在按钮上面绑定了点击事件,发送一则消息,想通知 B页面。


<!-- A.vue -->
<template>
    <button @click="sendMsg()">-</button>
</template>

<script> 
import { EventBus } from "../event-bus.js";
export default {
  methods: {
    sendMsg() {
      EventBus.$emit("aMsg", '来自A页面的消息'); // 对外发送数据
    }
  }
}; 
</script>

3. 接收事件($on())

接下来,需要在 B页面中接收这则消息。


<!-- B.vue -->
<template>
	<p>{{msg}}</p>
</template>

<script> 
import { EventBus } from "../event-bus.js";
export default {
	data() {
		return {
			msg: ''
		}
	},
	mounted() {
		EventBus.$on("aMsg", (msg) => { // 接收 A 发送来的消息
			this.msg = msg;
		});
	}
};
</script>

4. 移除事件监听者

前面提到过,如果使用不善,EventBus会是一种灾难,到底是什么样的“灾难”了?大家都知道vue是单页应用,如果你在某一个页面刷新了之后,与之相关的EventBus会被移除,这样就导致业务走不下去。还要就是如果业务有反复操作的页面,EventBus在监听的时候就会触发很多次,也是一个非常大的隐患。这时候我们就需要好好处理EventBus在项目中的关系。通常会用到,在vue页面销毁时,同时移除EventBus事件监听。

如果想移除事件的监听,可以像下面这样操作:


import { EventBus } from "../event-bus.js";
EventBus.$off('aMsg', {})

EventBus.$off('aMsg')移除应用内所有对此某个事件的监听。
或者直接调用 EventBus.$off() 来移除所有事件频道,不需要添加任何参数 。

四、Vuex

在做中大型的单页应用的时候,例如需要多人协作开发,全局维护登录状态等,我们最好还是选择vuex来进行状态管理。

vuex详解传送门

到此这篇关于Vue组件通信方法案例总结的文章就介绍到这了,更多相关Vue组件通信方法总结内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue组件通信方法案例总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue组件间通信方式全面汇总介绍

这篇文章主要介绍了Vue组件间通信方式全面汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-05-16

vue组件间的通信,子组件向父组件传值的方式汇总

这篇文章主要介绍了vue组件间的通信,子组件向父组件传值的方式汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-20

Vue组件间通信的方法有哪些

这篇“Vue组件间通信的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue组件间通信的方法有哪些”文章吧。方法一
2023-07-05

Vue组件间通信的实现方法讲解

组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互进行直接的引用,所以组件间的相互通信是非常重要的
2023-01-09

Vue实现组件间通信的示例

这篇文章主要介绍了Vue实现组件间通信的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 父子间通信最常见的就是父子之间的通信,通信是双向的数据传递。1.1 父组件 -
2023-06-15

Vue组件的通信方式详解

这篇文章主要介绍的是Vue组件间的通信方式,本文将系统的介绍了几种不使用Vuex,比较实用的组件间的通信方式,希望能帮助到大家
2023-05-15

vue组件传值的11种方式总结

这篇文章主要介绍了vue组件传值的11种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-13

编程热搜

目录