使用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);
}
}
浙公网安备 33010602011771号