Я пытаюсь создать событие из свойства экземпляра в nuxt, однако событие не отправляется и не принимается.
plugins/internal/bus.js
import Vue from 'vue';
const eventBus = {}
eventBus.install = function (Vue) {
Vue.prototype.$bus = new Vue()
}
Vue.use(eventBus)
plugins/internal/index.js
import Vue from 'vue';
export default function (_ctx, inject) {
const notify = function (msg) {
console.info('emitting', msg);
setInterval(() => {
this.$bus.$emit('add', msg);
}, 500);
}
.bind(new Vue());
inject('notify', notify);
}
nuxt.config.js
plugins: [
'~/plugins/internal/bus.js',
'~/plugins/internal/index.js',
...
]
И в моем компоненте
mounted() {
this.$bus.$on('add', (val) => {
console.info(val);
})
this.$bus.$on('close', this.onClose)
},
При выполнении this.$notify({ foo: 'bar' })
свойство экземпляра вызывается правильно, однако либо событие не генерируется, либо не принимается, честно говоря, не знаю, как это отлаживать. Что мне здесь не хватает?
Что ж, дальше я собирался попробовать Vuex, хотя не прочь взглянуть на упомянутую статью.
Спасибо, посмотрю. Я не мог найти много информации об использовании Vuex для отправки какого-либо события, есть ли какие-то ресурсы для этого?
официальная документация по-прежнему лучшее место для посещения.
Спасибо, хотя решение этого было очень глупым.. Я забыл зарегистрировать компонент Notification
..
В конце концов, проблема исходила от компонента (Notification
), который не был зарегистрирован должным образом.
Для отладки используйте Vue devtools. Вы сможете увидеть, что излучается. Кстати, почему вы используете шину событий? Vuex чище и его проще отслеживать (следовательно, отлаживать). Ваш код кажется довольно сложным, есть ли причина? Если ваша проблема не может быть решена с помощью Vuex, я могу дать вам ссылку на доклад/статью, объясняющую, как вы могли бы добиться этого в Nuxt.