vue3事件总线mitt使用方式
2023-12-28 10:48:45
我的使用场景
在项目中遇到一个这样的问题。页面使用了keepalive
缓存, 员工排班和班次之间的数据有关联,当我删除一个班次后,给员工排的班,属于那个被删的班次的情况,已经生效的不会受影响,但是未生效的排班会被删除。如果我不重新拉取后端数据的话,我从班次页面切换到员工排班页面,我前端的排班还是存在的,但是后端的数据已经删除了。这个时候用户点击删除排班,就会出现不友好的提示,我需要避免这个情况。这就需要再删除班次的时候,重新拉取员工排班列表的数据了。
使用方法
安装mitt
npm install mitt
创建一个事件总线
在你的项目中创建一个事件总线,可以将其放在一个单独的文件中,例如 eventBus.js
// eventBus.js
import mitt from 'mitt';
export const eventBus = mitt();
在员工排班中监听事件
监听来自事件总线的事件,然后调用相应的方法,记得要在页面销毁的时候,取消监听。
// schedule.vue
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { eventBus } from '@/path/to/eventBus'; // 这个路径需要对应上
export default {
setup() {
const search = () => {
// 在这里执行方法
console.log('方法被调用');
};
onMounted(() => {
eventBus.on('getScheduleSearch', search);
});
// 在页面被销毁的时候,取消监听
onBeforeUnmount(() => {
eventBus.off('getScheduleSearch', search);
});
return {};
},
};
在班次页面中触发事件
触发事件,通知员工排班页面执行方法。
// shift.vue
import { ref } from 'vue';
import { eventBus } from '@/path/to/eventBus'; // 这个路径需要对应上
export default {
setup() {
// 假设这是我删除班次的方法
const deleteShift = () => {
// 在这里触发事件,通知员工排班页面执行方法。
eventBus.emit('getScheduleSearch');
};
return { getScheduleSearch };
},
};
这样,你就可以在班次页面中调用 deleteShift 方法时,员工排班页面中的 search 方法就会被触发。这是一种基于事件的简单而灵活的通信方式,适用于不同组件之间的解耦。
文章来源:https://blog.csdn.net/weixin_44468853/article/details/135247157
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!