Vue组件间通信的6种方式

25 篇文章 0 订阅

1. props/$emit 父子组件通信

子组件通过 props接收父级传递的参数,通过$emit触发父级方法,传递参数

子组件:
<input type="text" :value="title">
<button @click="addList">添加</button>
...
props: ['title'],

...
addList () {
      this.$emit('add', this.title);
...
}

父级通过 在子组件上 @方法名 监听事件

父组件:
<Input @add="addHandler" />

addHandler (title) {
    console.log(title); // 子组件传递的值
}

2. 使用ref 和 $parent / $children 父子组件通信

父组件取子组件的值
1. 使用$children

this.title = this.$children[0].title;

2. 使用$ref获取指定子组件的值

<Input ref="childInput" />
this.title = this.$refs.childInput.title;

子组件取父组件的值

// 子组件中
this.msg = this.$parent.msg;

3.使用EventBus  兄弟组件通信

其实event就是个空的vue实例,使用event.$on监听自定义事件,evevt.$emit触发,event.$off解除绑定

event.js

import Vue from 'vue';

export default new Vue();

兄弟1-传值方

import event from '../../utils/event.js'

// 兄弟组件通信,触发自定义事件
event.$emit('logTitle', this.title);

兄弟2-接收值方

import event from '../../utils/event.js'

// 绑定自定义事件
event.$on('logTitle', this.consoleTitle);
...
consoleTitle(title) {
      console.log('兄弟组件间通信', title);
}
...

beforeDestroy() {
      // 注意销毁周期解绑自定义事件
      event.$off('logTitle', this.consoleTitle);
}

4.$attrs / $listeners 适用于 隔代组件通信

 

$attrs:包含了父作用域中不被prop所识别(且获取)的特性绑定(class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定(class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件。通常配合 inheritAttrs 选项一起使用

$listeners:包含了父作用域中的(不含.native 修饰器的)v-on 事件监听器,它可以通过 v-on="$listeners" 传入内部组件

 

5.provide / inject 适用于 隔代组件通信

祖先组件通过 provider 来提供变量,然后在子孙组件中通过 inject 来注入变量,provide / inject API 主要解决了跨级组件间的通信问题,不过它的使用场景,主要是子组件获取上级组件的状态,跨级组件之间建立了一种主动提供与依赖注入的关系

父组件中:

// 父组件
provide() {
    return {foo: 'foo'}
}
...
data() {

}

子组件中:

inject: ['foo'],
...
data() {
}

 

6. Vuex 适用于 父子、隔代、兄弟组件通信

Vuex 是专为Vue.js应用程序开发的状态管理模式

关于vuex使用,详见 vuex 使用详解

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端卡卡西呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值