【问题标题】:Aliases for event bus $emit事件总线 $emit 的别名
【发布时间】:2020-06-26 01:32:50
【问题描述】:

我想为常用的事件总线方法$emit$on等创建别名...

这样我就可以像这样引用事件总线对象:EventBus.publish(...)

我试过了:

import Vue from 'vue'
const EventBus = new Vue()

export const publish = EventBus.$emit
export const subscribe = EventBus.$on

然后:

import * as EventBus from '@/utils/eventBus.js'

但我得到 $emit 不是函数

我做错了什么?

谢谢

【问题讨论】:

  • 我会试试const publish = EventBus.$emit.bind(EventBus)

标签: vue.js vue-component event-bus


【解决方案1】:

确保绑定到对象,否则该方法将不起作用:

import Vue from 'vue'
const EventBus = new Vue()

export const publish = EventBus.$emit.bind(EventBus)
export const subscribe = EventBus.$on.bind(EventBus)
export const unsubscribe = EventBus.$off.bind(EventBus)

或更明确地说:

export function publish(name, ...args) {
  EventBus.$emit(name, ...args)
}

export function subscribe(name, fn) {
  EventBus.$on(name, fn)
}

export function unsubscribe(name, fn) {
  EventBus.$off(name, fn)
}

你像这样导入它:

import * as EventBus from './eventBus.js'

EventBus.subscribe('event', handler)

【讨论】:

  • 我很确定我试过 bind 但很可能在其他地方搞砸了 :) 谢谢
猜你喜欢
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2017-09-20
相关资源
最近更新 更多