vue组件通信的几种方法

vue中我们最常使用的就是父子之间的通信还有全局数据管理vuex了,下面粗略说一下vue组件通信的几种方法

组件通信的几种方式

1、父子组件通信

2、兄弟组件通信

3、跨多层级组件通信

4、任意组件(vuex)

一、父子组件

1、父组件通过props传递数据给子组件,子组件通过$emit发送事件传递数据给父组件(单向数据流)

2、还可以通过v-model语法糖(双向数据绑定)

3、$parent,$children对象来访问组件实例中的方法和数据

4、$listeners,$sync(2.3版本以上),$listeners属性会将父组件中(不含.native修饰器)v-on事件监听器传给子组件,子组件可以通过访问$listeners来自定义监听器,.sync属性是个语法糖,可以简单的实现子组件与父组件通信

5、$ref也可进行组件通信,放在组件上可以获取组件实例

 

<!--父组件中-->
<input :value.sync="value"/>
<!--以上写法等同于-->
<input :value="value" @undate:value="v=>value=v"></comp>
<!--子组件中-->
<script>
    this.$emit('update:value',1)
</script>

二、兄弟组件通信

1、可借助父组件当做通讯的桥梁

2、利用eventBus总线实现,(实际上就是新建一个vue实例,用eventBus.$emit替代this.$emit,一样用v-on监听事件变化)

// main.js
import Vue from 'vue'
import App from './App'
 
export const eventBus = new Vue()
 
new Vue({
    el: '#app',
    render: h => h(App)
})

在兄弟组件中导入

<!-- BrotherCard.vue -->
 
<script>
    import { eventBus } from '../main'
</script>

对于这种情况可以通过查找父组件中的子组件实现,也就是this.$parent.$childrren,在$children中可以通过组件name查询到需要的组件实例,然后进行通信。$children返回的是一个组件集合

1)$refs

首先,给子组件做标记,demo:

<firstchild ref="one"></firstchild>

然后再父子间中,通过this.$refs.one就可以访问到这个子组件了,包括访问子组件的data里面的数据,调用他的函数

三、跨多层级组件通信

provide / inject(常见得到就是无感刷新)

// 父组件 A
export default {
  provide: {
    data: 1
  }
}
// 子组件 B
export default {
  inject: ['data'],
  mounted() {
    // 无论跨几层都能获得父组件的 data 属性
    console.log(this.data) // => 1
  }
}

四、任意组件

使用vuex或者eventBus

全局数据管理大家都很熟悉,就不多累赘了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟咸鱼一锅端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值