gpt4 book ai didi

javascript - VueJS 如何监听所有自定义事件?

转载 作者:数据小太阳 更新时间:2023-10-29 05:21:28 28 4
gpt4 key购买 nike

在我的 VueJS 应用程序中,我有一个 Vue 实例,我将其用作在组件之间发送数据的事件总线。

就是这样:

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

然后在我的组件中导入 EventBus 并使用 EventBus.$emit()EventBus.$on()

这里解释了这种方法:https://alligator.io/vuejs/global-event-bus/

我想做的是监听通过 EventBus 发送的任何事件。如果我可以将一个监听器绑定(bind)到所有事件,我可以使用它来记录或将数据馈送到我的开发环境的某个系统中,该系统会在所有数据进入 eventBus 时显示给我,这将非常有用。

是否有任何类型的 vm.$listenToEverything() 是我遗漏的或有什么方法可以使它正常工作?

最佳答案

如果您处于 ES6 上下文中,则可以采用以下任一方法。我通过评论解释。

通过继承覆盖

'use strict'

import Vue from 'vue'

export class EventBus extends Vue {
// Register a custom callback as meddler that gets called upon each event emission.
// It can be bound to $on as well.
$meddle (callback) {
this.meddler = callback
}

// Override Vue's $emit to call the custom meddler callback upon each event emission.
$emit (event, ...args) {
if (this.meddler && typeof this.meddler.call === 'function') {
this.meddler(event, ...args)
}

return super.$emit(event, ...args)
}

// We can also override $on() to listen to callbacks being registered.
}

export default new EventBus()

通过劫持覆盖

或者使用“劫持” 工厂类以防您不想包装 Vue 事件总线。逻辑基本相同,但是,在这种方法中我们 hijack ,或者换句话说,monkey patch方法而不是直接覆盖它们。

'use strict'

import Vue from 'vue'

class EventBusFactory {
static create () {
return this.hijack(new Vue())
}

static hijack (bus) {
bus.$meddle = callback => {
bus.meddler = callback
}

const orig$emit = bus.$emit
bus.$emit = (event, ...args) => {
if (bus.meddler && typeof bus.meddler.call === 'function') {
bus.meddler(event, ...args)
}

orig$emit.call(bus, event, ...args)
}

return bus
}
}

export default EventBusFactory.create()

关于javascript - VueJS 如何监听所有自定义事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com