小编在工作中因为不规范地使用eventBus,发现了一个知识盲区!那就是:vue组件新旧实例更替时生命周期函数调用顺序。
结论先行:
-
发现vue新旧实例的生命周期函数执行顺序是:
- 新实例created() → 旧实例beforeDestroy() → 新实例 mounted()
-
复杂项目使用EventBus不便于管理数据流。要用的话注意:
eventBus.$on(’save’, callBackFunc)添加callBackFunc对事件‘save’的监听。eventBus.$off(’save’, callBackFunc),解除callBackFunc对事件’保存’的监听,如果空着就是解除!!全局!!对事件Event的监听。
问题:
这里因为小编偷懒,只写了eventBus.$off(’save’),所以解除了事件的全局监听!所以就变成了:
| 新实例created() → | 旧实例beforeDestroy() → | 新实例 mounted() |
| 添加监听 → | 移除全局监听 |
解决办法
-
在A组件的created中:
eventBus.$off(’save’,callBackFunc).$on(’save’,callBackFunc) -
或者是在mounted中添加监听在beforeDestroy中移除监听 | | | | | --- | --- | --- | | 新实例created() → | 旧实例beforeDestroy() → | 新实例 mounted() | | | 移除全局监听 | 添加监听|