我就遇到了一个奇怪的事情,console.log可以打印出对应的值,但是页面上的变量没有任何变化,还是data()函数里的初始值。
通过查询资料得知原来 vue路由切换时,会先加载新的组件,等新的组件渲染好但是还没有挂载前,销毁旧的组件,之后挂载新组件,如下图所示:
新组件beforeCreate
↓
新组件created
↓
新组件beforeMount
↓
旧组件beforeDestroy
↓
旧组件destroyed
↓
新组件mounted
注意,在$emit时,必须已经$on,否则将无法监听到事件。
所以正确的写法应该是在需要接收值的组件的created生命周期函数里写$on,在需要往外传值的组件的destroyed生命周期函数函数里写$emit
这样写,在旧组件销毁的时候新的组件拿到旧组件传来的值,然后在挂载的时候更新页面里的数据。
样例
A接收数据方
created() {
this.$bus.$off('essayDate')
this.$bus.$on('essayDate',(a)=>{
this.essayobj={...this.essayobj,...a}
}
},
B提供数据方
destroyed(){
this.$bus.$emit('essayDate',this.a)
} destroyed(){
this.$bus.$emit('essayDate',this.a)
}