vue3事件总线mitt使用方式

我的使用场景

在项目中遇到一个这样的问题。页面使用了keepalive缓存, 员工排班和班次之间的数据有关联,当我删除一个班次后,给员工排的班,属于那个被删的班次的情况,已经生效的不会受影响,但是未生效的排班会被删除。如果我不重新拉取后端数据的话,我从班次页面切换到员工排班页面,我前端的排班还是存在的,但是后端的数据已经删除了。这个时候用户点击删除排班,就会出现不友好的提示,我需要避免这个情况。这就需要再删除班次的时候,重新拉取员工排班列表的数据了。

使用方法
安装mitt
复制代码
npm install mitt
创建一个事件总线

在你的项目中创建一个事件总线,可以将其放在一个单独的文件中,例如 eventBus.js

js 复制代码
// eventBus.js
import mitt from 'mitt';
export const eventBus = mitt();
在员工排班中监听事件

监听来自事件总线的事件,然后调用相应的方法,记得要在页面销毁的时候,取消监听。

js 复制代码
// 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 {};
  },
};
在班次页面中触发事件

触发事件,通知员工排班页面执行方法。

js 复制代码
// shift.vue
import { ref } from 'vue';
import { eventBus } from '@/path/to/eventBus';		// 这个路径需要对应上

export default {
  setup() {
  	// 假设这是我删除班次的方法
    const deleteShift = () => {
      // 在这里触发事件,通知员工排班页面执行方法。
      eventBus.emit('getScheduleSearch');
    };

    return { getScheduleSearch };
  },
};

这样,你就可以在班次页面中调用 deleteShift 方法时,员工排班页面中的 search 方法就会被触发。这是一种基于事件的简单而灵活的通信方式,适用于不同组件之间的解耦。

相关推荐
东北甜妹15 分钟前
Python脚本
java·开发语言·前端
四千岁17 分钟前
WSL + OpenCode 最佳实践:环境一致、模型配置、GUI 远程使用
前端·javascript·后端
你挚爱的强哥18 分钟前
【sgCreateQrcode】自定义组件:模仿草料二维码做了一个简单的二维码制作组件
javascript·vue.js·elementui
ssshooter28 分钟前
Tauri 2 Linux 上 asset://localhost 访问返回 403 避坑指南
前端·后端·架构
半世轮回半世寻31 分钟前
这 5 个 Elements 小技巧,真的能提高调试效率
前端·浏览器
kyriewen32 分钟前
for...of 的秘密:迭代器与可迭代对象,你也能创造“可循环”的东西
前端·javascript·面试
SuperEugene32 分钟前
前端 Git 协作规范实战:commit message + 分支管理 + 合并流程,告别冲突与混乱|工程化与协作规范篇
前端·javascript·vue.js·git·前端框架
泯仲33 分钟前
Zustand 状态管理实战详解:轻量高效的React状态方案
前端·javascript·react.js
Arthur147261228654734 分钟前
useTemplateRef 详解
前端·vue.js
张一凡9335 分钟前
做了一个AI聊天应用后,我决定试试这个状态管理库
前端·javascript·react.js