使用Vuex实现Event bus的组件通讯的功能

1.Event bus的实现

首先创建一个新的vue实例(事件总线),将$emit和$on都挂靠在此实例对象上,在需要用到Event bus的组件中引入,实现任意关系的A、B组件之间进行通讯,代码如下:

//bus.js
import Vue from 'vue'
export default new Vue()

//A组件触发事件
Bus.$emit("事件名称",参数)

//B组件监听事件
Bus.$on("事件名称",回调函数)

2.Vuex实现

我想到的是在state中新建一个Boolean值属性,在A组件commit更改此属性,在B组件中监听此Boolean值的变化执行相应操作(数据要同步更新,state的值必须写在computed中),代码如下

//store.js
state() {
    return {
        initValue: false
    }
},
mutations: {
  changeData(state,value){
    state.initValue = value
  }
}

//A组件提交变动
this.$store.commit("changeData",true)    

//B组件监听state值
computed: {
  initValue() {
    return this.$store.state.initValue
  }
}
//重点:使用watch监听initValue计算属性的变化(computed也是组件的一种数据类型,另外两个是props、data)
watch: {
  initValue(newVal, oldVal) {
    //数据改变执行的操作
    console.log(newVal, oldVal);
  }
}

  

posted on 2019-10-11 10:28  肥嘟嘟啊左卫门  阅读(445)  评论(0编辑  收藏  举报