bug:当组件被多个页面复用时,组件被触发时传递的事件可能会传递到多个页面。然而并非所有的页面都需要接收这个事件
解决办法(两种):
- 判断路由:在组件触发事件往外传递之前先判断当前路由:
1 2 3 4 5 6 7
| imageLoad() { if (this.$route.path.indexOf("/home") !=-1) { this.$bus.$emit("itemImageLoad"); } else if (this.$route.path.indexOf("/detail") !=-1) { this.$bus.$emit("detailItemImgLoad"); } },
|
- 对监听的事件进行保存,当离开页面时,取消对应的对全局事件的监听
1 2 3 4 5 6 7 8 9 10
| mounted() { const refresh = debounce(this.$refs.scroll.refresh, 200);
this.itemImgLoad = () => { refresh(); }; this.$bus.$on("itemImageLoad", this.itemImgLoad); },
|
1 2 3 4
| deactivated() { this.$bus.$off("itemImageLoad", this.itemImgLoad); },
|
注意:如果使用的组件没有缓存(keep-alive)是无法调用deactivated()的,可以用destroyed()代替