#vue.js #events
#vue.js #Мероприятия
Вопрос:
У меня такая структура компонента:
/parent
/childA
/childB
Я хотел бы отправить сообщение от childA
childB
кому, поэтому в childA
компоненте VueJS я выдаю событие, подобное этому:
this.$root.$emit('message', 'hello')
В childB
компоненте я регистрирую слушателя следующим образом:
mounted() {
this.$root.$on('message', (arg) => {
console.log('message: ' arg)
})
}
Когда событие запускается (при взаимодействии с пользователем), childA
я вижу это в консоли:
[Vue warn]: Error in event handler for "message": "TypeError: Cannot read property 'apply' of undefined"
TypeError: Cannot read property 'apply' of undefined
message:
(3) message: hello
Это (3)
число 3
, обведенное кружком, указывающее (я полагаю), что то же console.log
самое произошло 3 раза.
Почему эти ошибки возникают при успешной очистке события?
Если это поможет, я получил свой код из этого среднего сообщения.
Ответ №1:
Попробуйте это:
Для эмиссии в вашем компоненте:
this.$emit('message', 'hello')
И в вашем родительском компоненте вам не нужно создавать прослушиватель в ‘mounted ()’. просто в вашем разделе шаблона вызовите метод для этого события следующим образом:
<component @message="showMessage"/>
Затем создайте метод, подобный этому:
methods: {
showMessage (message) {
console.log(message)
}
}
Комментарии:
1. Я не слушаю родительский или дочерний компонент. Это два отдельных компонента. Они оба находятся в одном и том же родительском компоненте, но они не находятся в отношениях / структуре родитель / потомок.
2. Я обновил свой пост, чтобы немного подробнее описать структуру компонентов.
3. В этом случае вам необходимо использовать EventBus. С помощью EventBus вы можете вызвать событие в любом месте и обработать его в любом месте. Просмотрите эту статью, чтобы узнать, как использовать EventBus: digitalocean.com/community/tutorials/vuejs-global-event-bus
4. В моем случае это не работает. У меня событие запускается из обработчика axios.