加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Vue组件间通信六种方式(完整版)

发布时间:2019-05-17 21:06:54 所属栏目:建站 来源:浪里行舟
导读:前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。一般来说,组件可以有以下几种关系: 如上图所示,A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔

需要注意的是:这两种都是直接得到组件实例,使用后可以直接调用组件的方法或访问数据。我们先来看个用 ref来访问组件的例子:

  1. // component-a 子组件 
  2. export default { 
  3.   data () { 
  4.     return { 
  5.       title: 'Vue.js' 
  6.     } 
  7.   }, 
  8.   methods: { 
  9.     sayHello () { 
  10.       window.alert('Hello'); 
  11.     } 
  12.   } 
  1. // 父组件 
  2. <template> 
  3.   <component-a ref="comA"></component-a> 
  4. </template> 
  5. <script> 
  6.   export default { 
  7.     mounted () { 
  8.       const comA = this.$refs.comA; 
  9.       console.log(comA.title);  // Vue.js 
  10.       comA.sayHello();  // 弹窗 
  11.     } 
  12.   } 
  13. </script> 

不过,这两种方法的弊端是,无法在跨级或兄弟间通信。

  1. // parent.vue 
  2. <component-a></component-a> 
  3. <component-b></component-b> 
  4. <component-b></component-b> 

我们想在 component-a 中,访问到引用它的页面中(这里就是 parent.vue)的两个 component-b 组件,那这种情况下,就得配置额外的插件或工具了,比如 Vuex 和 Bus 的解决方案。

总结

常见使用场景可以分为三类:

  • 父子通信:

父向子传递数据是通过 props,子向父是通过 events($emit);通过父链 / 子链也可以通信($parent / $children);ref 也可以访问组件实例;provide / inject API;$attrs/$listeners

  • 兄弟通信:

Bus;Vuex

  • 跨级通信:

Bus;Vuex;provide / inject API、$attrs/$listeners

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读