1、概念
EventBus称为事件总线。
EventBus就如同公交车,通过’$emit’让乘客(即所要传递的值)在发出地上车,在目的地通过’$on’使乘客下车。
2、问题
两个组件,A组件和B组件两个不存在任何套嵌关系,通过路由跳转,就会存在一个问题,值传过来了但是页面HTML没有显示。
也就是说如果A组件和B组件在同一个页面,通过eventbus传值是好用的,但是如果不是,就会产生问题。
3、原因
与组件的生命周期有关,他们的加载顺序是这个样子的:
新组件:beforeCreate
↓
新组件:created
↓
新组件:beforeMount
↓
旧组件:beforeDestroy
↓
旧组件:destroyed
↓
新组件:mounted
由此可以了解到你要在新组件dom挂载前将值传出来。
4、代码
A组件(要传值的组件)
beforeDestroy () {
this.$bus.$emit('handleSave',this.formData)
},
B组件(接收数据的组件)
created() {
let _this = this
this.$bus.$on('handleSave',(row) => {
_this.$set(_this.formTableData.tableData,_this.settingIndex,row)
})
},
OK,解决