Vue.js 动态侦听父组件上的自定义事件

Vue.js 动态侦听父组件上的自定义事件,vue.js,Vue.js,在我的自定义库中,我有几个运行ajax请求的组件,当给定的请求失败时,该组件将发出一个错误事件 然后,在我的主组件中,我想监听所有发出的错误事件,并运行方法handleErrors,但为此,我必须在每个组件上添加@error=“handleErrors” 有没有一种方法可以配置我的主组件来动态捕获错误事件并调用handleErrors,而无需运行每个组件并添加它?最好只更改主组件。您可以在Vue实例中使用EventBus系统。事实上,EventBus是一个不同的Vue实例—您的主Vue实例。您可

在我的自定义库中,我有几个运行ajax请求的组件,当给定的请求失败时,该组件将发出一个
错误
事件

然后,在我的主组件中,我想监听所有发出的
错误
事件,并运行方法
handleErrors
,但为此,我必须在每个组件上添加
@error=“handleErrors”


有没有一种方法可以配置我的主组件来动态捕获
错误
事件并调用
handleErrors
,而无需运行每个组件并添加它?最好只更改主组件。

您可以在Vue实例中使用EventBus系统。事实上,EventBus是一个不同的Vue实例—您的主Vue实例。您可以创建自己的事件总线系统。
$emit
$on
$off
事件

事件总线.js

从“Vue”导入Vue;
export const EventBus=new Vue();
现在您可以使用了

某些组件.vue

//导入EventBus。
从'./event bus.js'导入{EventBus};
//使用有效负载(单击计数)在通道(eventName)上发送事件
EventBus.$emit('eventName',this.clickCount);
其他组件.vue

//导入EventBus。
从'./event bus.js'导入{EventBus};
//侦听eventName事件及其负载。
EventBus.$on('eventName',clickCount=>{
console.log(单击计数)
});
//别听了。
EventBus.$off('eventName');
更多信息和示例

找到了一种不重构单个组件的方法:只需使用mixin在每个组件中注入侦听器

结果是:

// Before starting up the main instance:
Vue.mixin({
    created: function() {
        this.$on('error', function(error) {
            // Then I handled the errors here.
        );
    }
});

编辑组件是不可取的(因为有很多),但如果没有更好的方法出现,我会这样做