Я хочу отправить событие от дочернего компонента его родительскому, что должно изменить представление.
Я могу создать событие и отправить его, однако мой шаблон, похоже, не регистрирует его, я использую однофайловые компоненты (SFC). Также, если я вручную обновляю объект данных, все работает нормально.
App.vue (родительский)
<template>
<div v-on:change-view = "updateView">
<!-- render the currently active component/page here -->
<component v-bind:is = "currentView"></component>
</div>
</template>
<script>
export default {
name : 'app',
data () {
return {
currentView : 'Modal'
}
},
methods : {
updateView (view) {
console.info('event listener!!!')
this.currentView = view;
}
}
}
</script>
Modal.vue (Дочерний)
<template>
<div>
<vk-modal v-bind:show = "show">
<h1>{{ title }}</h1>
<p>{{ body }}</p>
<p class = "uk-text-right">
<vk-button v-on:click = "$emit('change-view', 'Purposes')">More Information</vk-button>
<vk-button v-on:click = "fullConsent" type = "primary">I Agree</vk-button>
</p>
</vk-modal>
</div>
</template>
<script>
export default {
name : 'modal',
data () {
return {
show : true,
title : 'Hello'
}
},
methods : {
fullConsent () {
this.show = false;
}
}
}
</script>
Пожалуйста помоги :)
Я звоню Vue.component('Purposes', Purposes); в main.js



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам необходимо зарегистрировать прослушиватель событий на самом <component>; события компонентов не всплывают (в отличие от событий DOM).
<div>
<component v-bind:is = "currentView" v-on:change-view = "updateView"></component>
</div>
Есть ли способ сделать это с помощью самого JS (методов), как создать событие, так и прослушать?
Если у вас есть ссылка на компонент (через ref), вы можете добавить слушателя с $on, см. Слушатели программных событий.
Доступен ли компонент Purposes в App.vue, т. Е. Зарегистрирован как глобальный компонент? В противном случае он должен быть зарегистрирован как локальный компонент.