vue.js - 事件总线 $emit 的别名
问题描述
我想为常用的事件总线方法创建别名$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 不是一个函数
我究竟做错了什么?
谢谢
解决方案
确保绑定到对象,否则该方法将不起作用:
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)
推荐阅读
- php - 为什么我的 eloquent 查询在以后使用时会被覆盖?
- kubernetes - ISTIO sidecar 使用 Jaegar 进行分布式跟踪
- python - Python - 命令行参数提取为字符串 ImportError
- python - 如何修复 ImportError:scipy.spatial 模块的 DLL 加载失败?
- java - 有没有办法访问在 openid 连接过程中设置的会话数据?
- sass - 如何在 SASS 函数中根据屏幕尺寸动态生成
- excel - 在 Excel 文档中搜索和处理多个匹配项
- python-3.x - 我想把字典作为输入,比如学生的roll和cgpa,我想对值进行排序,而不是对键进行排序
- annotations - Dymola 中的多个 MSL 版本
- flutter - Flutter - setState 未更新内部自定义有状态小部件