Прослушивание событий от ребенка к родителю во Vuejs

Я хочу отправить событие от дочернего компонента его родительскому, что должно изменить представление.

Я могу создать событие и отправить его, однако мой шаблон, похоже, не регистрирует его, я использую однофайловые компоненты (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>

Пожалуйста помоги :)

Доступен ли компонент Purposes в App.vue, т. Е. Зарегистрирован как глобальный компонент? В противном случае он должен быть зарегистрирован как локальный компонент.

Jakub Kutrzeba 11.05.2018 12:19

Я звоню Vue.component('Purposes', Purposes); в main.js

dendog 11.05.2018 13:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
2
3 437
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо зарегистрировать прослушиватель событий на самом <component>; события компонентов не всплывают (в отличие от событий DOM).

<div>
    <component v-bind:is = "currentView" v-on:change-view = "updateView"></component>
</div>

Есть ли способ сделать это с помощью самого JS (методов), как создать событие, так и прослушать?

dendog 11.05.2018 13:16

Если у вас есть ссылка на компонент (через ref), вы можете добавить слушателя с $on, см. Слушатели программных событий.

Decade Moon 11.05.2018 13:18

Другие вопросы по теме