vue3非父子组件方法调用;vue3使用EventBus;兄弟组件方法调用


1.新建eventBus

src/utils/eventBus.js

// import { createApp } from 'vue'
// const app = createApp({})
const listeners = new Map()

export const eventBus = {
  $emit(event, ...args) {
    const callbacks = listeners.get(event) || []
    callbacks.forEach(cb => cb(...args))
  },
  $on(event, callback) {
    if (!listeners.has(event)) {
      listeners.set(event, [])
    }
    listeners.get(event).push(callback)
  },
  $off(event, callback) {
    const callbacks = listeners.get(event)
    if (callbacks) {
      const index = callbacks.indexOf(callback)
      if (index > -1) callbacks.splice(index, 1)
    }
  }
}

2.被动执行方注册事件

import { onMounted, onBeforeUnmount } from "vue"
import { eventBus } from "@/utils/eventBus.js"

const getMsg = (item) => {
  console.log('%c【' + 'item' + '】打印', 'color: red;background:#0f0', item)
}

// 在组件挂载时添加全局点击事件监听器
onMounted(() => {
  eventBus.$off("setMsg", getMsg) // 调用前线清除 防止有历史重复的
  eventBus.$on("setMsg", getMsg)
})
onBeforeUnmount(() => {
  // 页面销毁前清除
  eventBus.$off("setMsg", getMsg)
})

3.主动调用方

import { eventBus } from "@/utils/eventBus.js"
eventBus.$emit("setMsg", '兄弟传参')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值