Vue组件通信的四种方式汇总

2020-06-16 06:05:32易采站长站整理

前言

众所周知vue是一种mvvm框架,它相对于jquery可能比较大的差异点之一就在于组件之间的通信了。本文重点是梳理了前两个,父子组件通信和eventBus通信,我觉得Vue文档里的说明还是有一些简易,我自己第一遍是没看明白。

父子组件的通信
非父子组件的eventBus通信
利用本地缓存实现组件通信
Vuex通信

第一种通信方式:父子组件通信

父组件向子组件传递数据

父组件一共需要做4件事

      1.

import son from './son.js'
引入子组件 son

      2.在

components : {"son"} 
里注册所有子组件名称

      3.在父组件的template应用子组件,

<son></son>

      4.如果需要传递数据给子组件,就在template模板里写

<son :num="number"></son>


// 1.引入子组件
import counter from './counter'
import son from './son'


// 2.在ccmponents里注册子组件
components : {
counter,
son
},


// 3.在template里使用子组件
<son></son>


// 4.如果需要传递数据,也是在templete里写
<counter :num="number"></counter>

子组件只需要做1件事

      1.用props接受数据,就可以直接使用数据

      2.子组件接受到的数据,不能去修改。如果你的确需要修改,可以用计算属性,或者把数据赋值给子组件data里的一个变量


// 1.用Props接受数据
props: [
'num'
],


// 2.如果需要修改得到的数据,可以这样写
props: [
'num'
],
data () {
return {
number : this.num
}
},

子组件向父组件传递数据

父组件一共需要做2件事情

在template里定义事件

在methods里写函数,监听子组件的事件触发


// 1. 在templete里应用子组件时,定义事件changeNumber
<counter :num="number"
@changeNumber="changeNumber"
>
</counter>


// 2. 用changeNumber监听事件是否触发
methods: {
changeNumber(e){
console.log('子组件emit了',e);
this.number = e