vue3 发布订阅插件---mitt

安装

 npm install mitt -s

 使用

1, 全局挂载使用

main.ts

import mitt from 'mitt'

const app = createApp(App)
app.component('Card',Card)

const Mit = mitt()

declare module 'vue' {
  export interface ComponentCustomProperties {
    $Bus: typeof Mit
  }
}

// 挂载到全局
app.config.globalProperties.$Bus = Mit

app.mount('#app')

组件中使用:

A组件发送事件和参数

<script setup lang="ts">
// 相当于vue2中的this
import { getCurrentInstance } from 'vue'

const data:string = 'mitt'
const ins = getCurrentInstance()
const emit=()=> {
    // 传递两个事件
  ins?.proxy?.$Bus.emit('on_click', data)
  ins?.proxy?.$Bus.emit('on_click2', 'ljad')
}
</script>

B组件接收

<script setup lang="ts">
import { ref, getCurrentInstance } from 'vue'

const ins = getCurrentInstance()
const num = ref('')
// 一个事件
// ins?.proxy?.$Bus.on('on_click', (...arg: any) => {
//   num.value = arg[0]
// })

// 接收多个事件
ins?.proxy?.$Bus.on('*', (type, ...args: any) => {
  console.log('type,args', type,args)
  if (type === 'on_click2') {
    num.value = args[0]
  }
})
</script>

取消监听、删除

const Bus = (...arg: any) => {

   num.value = arg[0]

}

// 监听事件

ins?.proxy?.$Bus.on('on_click', Bus)

// 取消单个订阅事件

ins?.proxy?.$Bus.off('on_click', Bus)

// 取消所有mitt

ins?.proxy?.$Bus.all.clear()

 2. 单独创建一个文件,使用的时候引用文件

// mitt库默认导出的是一个函数,我们需要执行它从而得到事件总线的对象
/* eventbus.js */
import mitt from 'mitt'
const Bus= mitt()
export default Bus
在指定组件中导入并使用它

复制代码
/* one.vue */
// 模板代码
<button @click="send">sure</button>  

// 导入事件总线
import Bus from "@/utils/eventbus.js";  
// methods代码
send(){
    // 触发自定义总线why,并传入一个对象
     Bus.emit("updateList",{name:'bbv',age:22})
}
复制代码
复制代码
/* two.vue */

// 导入事件总线
import Bus from "./utils/eventbus.js";

// 注册updataList事件总线
created(){
    Bus.on("updateList",msg=>{ console.log(msg) }) }
复制代码
取消所有的mitt事件

Bus.all.clear()
取消指定的mitt事件

// 回调定义在外部,类似于setTimeout
function onXxx(){}
Bus.on('foo',onXxx) //监听
Bus.off('foo',onXxx) //取消监听

 参考 Vue3中使用全局事件总线mitt - 简书 (jianshu.com) vue--Mitt全局事件的发布和订阅与取消订阅(也就是跨组件通讯) - _Origin - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值