vue组件间通信的六种方式(完整版)
时间:2023-03-14 17:04:29
科技观察
【.com原稿】前言组件是vue.js的强大功能之一,组件实例的作用域相互独立,也就是说不同的组件之间的数据不能相互引用。一般来说,组件可以有如下关系:如上图所示,A和B,B和C,B和D都是父子关系,C和D是兄弟关系,A和C是代际关系(可能是多代)。如何针对不同的使用场景选择有效的沟通方式?这就是我们要讨论的主题。本文总结了props、$emit/$on、vuex、$parent/$children、$attrs/$listeners和provide/inject等vue组件之间的几种通信方式,并用通俗易懂的例子说明了区别以及使用场景,希望对小伙伴们有所帮助。本文代码请戳github博客。纸上谈兵太肤浅了。让我们做更多的代码!方法一、props/$emit父组件A传递props给子组件B,B传递给A是通过B组件中的$emit和A组件中的v-on来实现的。1.父组件传值给子组件接下来我们用一个例子来说明父组件是如何给子组件传值的:如何在子组件Users中获取父组件App.vue中的数据users.vue:["Henry","Bucky","Emily"]//App.vue父组件//前者自定义名称方便子组件调用,后者需要传递数据名称
exportdefault{name:'HelloWorld',props:{users:{//这是父组件中的子标签自定义名称type:Array,required:true}}}总结:父组件传递数据通过道具向下到子组件。注:组件中数据的三种形式:data、props、computed2。子组件向父组件传递值(通过事件形式)。下面我们用一个例子来说明子组件是如何给父组件传值的:当我们点击“Vue.jsDemo”时,子组件给父组件传一个值,文字由原来的“传值”变成”到“子组件传值给父组件”,实现子组件传值给父组件。//子组件
//父组件
//与子组件titleChanged自定义事件一致//updateTitle($event)接受传入的文本{{title}}
总结:子组件通过事件向父组件发送消息,实际上是子组件向父组件发送自己的数据。方法二、$emit/$on该方法使用一个空的Vue实例作为中央事件总线(eventcenter),用它来触发事件和监听事件,巧妙轻量的实现任何组件之间的通信,包括父子组件,兄弟,越级。当我们的项目比较大的时候,可以选择比较好的状态管理方案vuex。1、具体实现方法:varEvent=newVue();Event.$emit(事件名称,数据);Event.$on(事件名称,数据=>{});2.例如:有3个兄弟组件,分别是A、B、C,C组件如何获取A或B组件的数据