vue兄弟组件间通信方法,vue组件间通信

  vue兄弟组件间通信方法,vue组件间通信

  组件之间的通信只是组件之间的数据传输。就像我们日常打电话一样,是一种沟通方式。你告诉我你说什么,我告诉你你说什么。你说的是数据。电话是一种通讯方式。无论是Vue还是React,都需要组件之间的通信。

  :

目录

   1.父子沟通1.1父组件-子组件1.2子组件-父组件2。孙儿之间的交流3。任何组件之间的通信3.1事件总线3.2 Vuex

  

1. 父子间通信

  最常见的就是父子之间的交流,这是一种双向的数据传输。

  

1.1 父组件 -- 儿子组件

  父组件传递数据给子组件的方式是通过Prop传递数据给子组件。

  //child.vue

  模板

  差异

  我是我的儿子,我从我父亲那里收到的数据是{{value}}

  /div

  /模板

  脚本

  导出默认值{

  道具:{

  值:字符串

  }

  }

  //App.vue

  模板

  div id=应用程序

  Child :value=x /

  /div

  /模板

  脚本

  从导入子级。/组件/子组件

  导出默认值{

  data(){

  返回{

  x:‘嗨,孩子’

  }

  },

  组件:{

  儿童

  }

  }

  /脚本

  

1.2 儿子组件 -- 父组件

  子组件向父组件传输数据的方式是通过子组件中的$emit触发自定义事件,使用子组件时v-on绑定监听自定义事件。

  在这里,的v-on事件通信在使用时作为子组件的事件属性被自动监控。

  因此,根据使用子组件时的自定义事件属性,子组件将数据传输到父组件。

  //child.vue

  模板

  差异

  我是我的儿子,我从我父亲那里收到的数据是{{value}}

  button @click=sayHi

  向父组件问好

  /按钮

  /div

  /模板

  脚本

  导出默认值{

  道具:{

  值:字符串

  },

  方法:{

  sayHi(){

  这个。$emit(sayHi ,嗨,家长!);

  }

  }

  }

  /脚本

  //App.vue

  模板

  div id=应用程序

  我是父组件,从子组件收到的数据是{{y}}。

  child:value= x @ sayHi= y=$ event /

  /div

  /模板

  脚本

  从导入子级。/组件/子组件

  导出默认值{

  data(){

  返回{

  x:‘嗨,孩子’,

  y:“”

  }

  },

  组件:{

  儿童

  }

  }

  /脚本

  

2. 爷孙间通信

  祖孙沟通,可以用两次v-on沟通,爷爷和爸爸沟通,然后爸爸和儿子沟通。

  您还可以在组件之间使用以下任何一种通信方式。

  

3. 任意组件间通信

  任何组件之间的通信都无法再区分A-to-B通信或B-to-A通信,但这是一种通用方式。谁想发送数据就用对应的API发送数据,谁想接收什么数据就用对应的API接收。

  任何组件之间的通信有两种方式,一种是使用EventBus发布订阅模式通信,另一种是使用Vuex通信。

  

3.1 EventBus

  EventBus,字面意思是事件总线。触发事件传输的所有数据都从前门上车,保存在总线上。然后,通过监视由相应事件提供的出口来丢弃相应的事件数据。

  EventBus,实际上就是发布订阅模式,意思是谁想把数据发出去,就通过触发自定义事件的API来发布数据;谁需要接收数据信息,谁就通过事件监控的API来监控数据。一旦检测到被监控数据被释放,就会被接收,这就是数据订阅。

  EventBus通信模式中最重要的是理解发布和订阅的接口API。在Vue中,Vue实例提供了两个接口,分别是$emit和$on,所以你可以创建一个空的Vue实例来获得这两个接口。

  const event bus=new Vue();

  事件总线。$ emit (eventname,[…args])//发布事件

  EventBus。$on(事件,回调)//订阅事件

  例子如下:

  //eventBus.js

  从“vue”导入Vue

  export const event bus=new Vue();

  //子级

  模板

  差异

  我是我的儿子,我从我父亲那里得到的数据是strong{{value}}/strong。

  button @click=sayHi

  向父组件问好

  /按钮

  button @click=sibling

  向兄弟组件问好。

  /按钮

  /div

  /模板

  脚本

  从导入{eventBus}./eventBus.js

  导出默认值{

  道具:{

  值:字符串

  },

  方法:{

  sayHi(){

  这个。$emit(sayHi ,嗨,家长!);

  },

  兄弟(){

  eventBus。$emit(兄弟姐妹,嗨,兄弟);

  }

  }

  }

  /脚本

  样式范围

  强{

  颜色:红色;

  }

  /风格

  //兄弟姐妹

  模板

  差异

  我是兄弟组件,从子组件收到的数据信息是strong{{x}}/strong。

  /div

  /模板

  脚本

  从导入{eventBus}./eventBus.js

  导出默认值{

  data(){

  返回{

  x:“”

  }

  },

  已安装(){

  eventBus。$on(sibling ,(msg)={

  this.x=msg

  })

  }

  }

  /脚本

  样式范围

  强{

  颜色:绿色;

  }

  /风格

  //父级

  模板

  div id=应用程序

  我是父组件,从子组件接收的数据是strong{{y}}/strong。

  child:value= x @ sayHi= y=$ event /

  兄弟姐妹

  /div

  /模板

  脚本

  从导入子级。/组件/子组件

  从导入同级。/组件/同级

  导出默认值{

  data(){

  返回{

  x:‘嗨,孩子’,

  y:“”

  }

  },

  组件:{

  孩子,

  兄弟

  }

  }

  /脚本

  样式范围

  强{

  颜色:蓝色;

  }

  /风格

  关于EventBus的这一部分可能会有疑问。既然Vue实例中有$emit和$on,为什么不用这个呢?$emit来触发事件和这个。$on接收活动?必须有一个额外的空实例eventBus=new Vue()。这是因为Vue中的每个组件都是Vue的一个独立实例。你在这个Vue实例中触发了这个实例的emit事件,但是不能接收另一个实例的on事件。如果它不在公共汽车上,你如何与事件沟通?所以,需要有一辆公共巴士,也就是事件巴士。

  上面例子中的eventBus的使用方法是本地eventBus,谁想使用eventBus都得手动引入。也可以把eventBus全局化,比如挂在vue的原型上。

  //main.js

  从“vue”导入Vue

  从导入应用程序。/App.vue

  Vue.config.productionTip=false

  Vue . prototype . $ event bus=new Vue();//加上这句话,必须在下面新的Vue之前。

  新Vue({

  render: h=h(App),

  }).$ mount(“# app”)

  //子级

  兄弟(){

  这个。$eventBus。$emit(兄弟姐妹,嗨,兄弟);

  }

  //兄弟姐妹

  已安装(){

  这个。$eventBus。$on(sibling ,(msg)={

  this.x=msg

  })

  }

  除了以上给Vue prototype添加属性的方式,还可以使用Object.defineProperty()给Vue prototype添加属性。

  从“vue”导入Vue

  从导入应用程序。/App.vue

  Vue.config.productionTip=false

  让eventBus=new Vue()

  object . define property(vue . prototype, $eventBus ,{

  get(){

  返回事件总线

  }

  })

  新Vue({

  render: h=h(App),

  }).$ mount(“# app”)

  

3.2 Vuex

  Vue组件之间的通信也可以使用状态管理模式:Vuex,这是专门为vue.js应用开发的。Vuex的使用很复杂。详见Vuex博客。Vuex适用于大型复杂Vue项目的状态管理。对于一些中小型的应用,可以根据vuex的原理,自定义状态管理的存储模式,Vue可以自定义状态管理。详见Vue简单状态管理-商店模式博客。

  无论是Vuex还是自定义存储模式,组件之间的通信原理都是通过共享数据来实现的。组件使用相同的数据源。当一个组件更改其数据时,另一个组件所依赖的数据源也会更改。

  这就是Vue如何实现组件间通信的细节。有关Vue组件间通信的更多信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: