vue组建通信的几种方式

一、父组件 ===》 子组件

1、props

父组件:

<HelloWorld msg="Welcome to Your Vue.js App"/>

子组件:

props:{msg:String}

2、refs

父组件:

<HelloWorld ref="hw"/>

调用子元素的方法以及属性
this.$refs.hw.xx=xxx

3、子元素children

父组件:

<HelloWorld />

调用第一个子元素的方法以及属性
this.$children[0].xx=xxx

注:
当前实例的直接子组件。需要注意 $children 并不保证顺序,也不是响应式的。如果你发现自己正在尝试使用 $children 来进行数据绑定,考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

二、子组件 ===》 父组件

(观察者模式)
子组件:

this.$emit('test',data)

父组件:

<HelloWorld @test="testFun($event)"/>

三、兄弟组件:通过共同祖辈组件

通过共同祖辈组件 p a r e n t 或 者 parent或者 parentroot
兄弟组件1:

this.$parent.$emit('test')

兄弟组件2:

this.$parent.$on('test',handle)

四、祖先和后代之间

使用props传递层级较多,使用provide 和 inject
类型:
provide:Object | () => Object
inject:Array | { [key: string]: string | Symbol | Object }

// 父级组件提供 'foo'
  provide: {
    foo: 'bar'
  }
// 或者:  provide()=> {
 //   foo: 'bar'
 // }

// 子组件注入 'foo'
  inject: ['foo'],
  created () {
    console.log(this.foo) // => "bar"
  }

注意:
provide 和 inject 主要在开发高阶插件/组件库时使用。并不推荐用于普通应用程序代码中。

四、任意两个组件之间

事件总线或VUX

1、事件总线:创建一个Bus类负责事件派发,监听和回调管理

//bus.js
import Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;

//子组件1
import bus from '@/utils/bus';
bus.$emit('collapse-content', msg);

//子组件2
import bus from '@/utils/bus';
bus.$on('collapse-content', msg => {
    this.collapse = msg;
}); 

2、vuex

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值