Предположим, у меня есть два родственных компонента, например:
<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, а другой в форме метода $ on, определенного для экземпляра Vue. Я не могу заставить первое работать, и я не уверен, почему.
Я предполагаю, что это должно иметь какое-то отношение к области действия сгенерированного события. Однако даже компонент, на который я нажимаю, не прослушивает событие, которое он генерирует при использовании директивы v-on. Любая помощь приветствуется!
С уважением,
Райан
Обновление: я обнаружил ошибку в своем коде, в которой указана директива v-for (@) слушал, было 'componentclicked' вместо 'somethingwasdone'. При исправлении ошибки заметил, что на самом деле оба метода работают.