【发布时间】:2020-05-26 15:36:14
【问题描述】:
假设我有两个这样的兄弟组件:
<div id="root2">
<some-component>First</some-component>
<some-component>Second</some-component>
</div>
...这些组件的定义如下:
Vue.component('some-component', {
template: '<button @click="doSomething" @somethingwasdone="this.reactToSomething" :disabled="this.isDisabled"><slot /></button>',
methods: {
doSomething() {
Event.$emit('somethingWasDone');
},
reactToSomething() {
this.isDisabled = true;
}
},
data() {
return {
isDisabled: false,
}
},
created() {
Event.$on('somethingWasDone', () => this.reactToSomething());
}
});
假设我的目标是在按下其中一个按钮时禁用这两个按钮。我特意包含了两个事件监听器,一个是“v-on”指令的形式,一个是在 Vue 实例上定义的 $on 方法的形式。我无法让前者工作,我不确定为什么。
我的猜测是它必须与发出事件的范围有关。但是,即使我单击的组件在使用 v-on 指令时也不会监听它发出的事件。非常感谢任何帮助!
问候,
瑞恩
更新:我在我的代码中发现一个错误,其中 v-for 指令 (@) 正在侦听的事件是“componentclicked”而不是“somethingwasdone”。在修复错误时,我注意到这两种方法实际上都有效。
【问题讨论】:
标签: javascript vue.js vuejs2