vue.js - vuejs - 如何防止组件响应全局事件
问题描述
我有一个从选择框更改触发的全局事件。
我有组件 A 响应事件并重定向。
我有组件 B,它也响应事件并重定向。
我有组件 C 响应事件并加载一些数据。
一次只有一个组件在其自己的“页面”(路由)上可见。选择框位于所有页面上。
发生的事情是我选择了一个选项,所有组件 AB 和 C 都在响应,导致重定向斗争和完全歇斯底里。
我希望当组件 C 显示时,组件 A 和 B 不会显示,因此不会响应事件。
我错过了什么?我尝试了许多 , , 的组合 ,但v-if
这些未“加载”的组件仍在响应事件......Mounted()
Ready()
beforeDestroy()
这是一些代码:
1)注册事件(在main.js中)
window.EventBus = new Vue();
2)在更改选择选项时添加事件:
EventBus.$emit('studentSelectLoaded')
3)在组件中捕获事件:
EventBus.$on('studentSelectedEvent', function(){
gd();})
我做了什么让它工作:
1)我在数据中有一个 dataReady 属性:
data() {
return {
data: {},
dataReady: false,
loading: false,
searchableTable: null,
route: 'coursework_list'
}
},
2)在销毁之前,我将数据准备好设置为假:
beforeDestroy(){
this.dataReady = false;
},
3)添加对事件侦听器的检查:
EventBus.$on('studentSelectedEvent', function(){
if(self.dataReady){
gd();
}
})
我将组件注册为通过路由加载的页面的子级,因此当页面未加载时,我希望组件未加载。
这是一个页面:
<template>
<div class="components">
<zzi-courseworklist></zzi-courseworklist>
</div>
</template>
<script>
import zzicourseworklist from "../../components/studentParent/CourseWorkList/CourseWorkList"
export default{
components:{
'zzi-courseworklist': zzicourseworklist
}
}
</script>
还有什么想法吗?
解决方案
推荐阅读
- selenium - 任何人都可以建议我使用任何工具来安排我的 UI 测试,以便它在给定的时间间隔自动开始测试
- c# - .Net Core 控制台/工作者中的 ConfigureAwait - 不是 Asp.Net Core
- python - 在 Shady 中控制逐帧绘制
- javascript - 如何在 Mongodb 的 find 中计算文档?
- html - 如何
- php - 如何修复 Laravel 5.3 中的字段创建错误?
- java - 创建一个有序队列的有效方法,其迭代器在 Java 中重复回到开头
- android - Android recyclerview 和片段:将我的数据提取放入我的回收器视图
- jquery - 根据 API 调用返回的数据构建滑块
- r - 在 scale_x_discrete 中使用 rev 会使条形宽度更小