зачем передавать: @my-event="myEvent"
?
Правильнее говорить не "передавать", а "назначать обработчик события". Чисто технически - да, происходит передача функции в экземпляр компонента. Но поскольку способ передачи указывает на специфический способ использования этой функции, давайте будем придерживаться соответствующей терминологии.
Итак, зачем назначать обработчик события? Вообще - это вам виднее, надо или не надо обрабатывать событие, и если надо, то как именно. А в данном конкретном случае - чтобы обновить значение свойства родительского компонента, отвечающего за состояние диалогового окна.
Кстати,в явном виде делать это совсем не обязательно.
Первый вариант - можно использовать
модификатор sync при привязке значения параметра
aa
:
<modal-notifications :aa.sync="isActive" :message="message"></modal-notifications>
Метод закрытия в компоненте окна в этом случае станет выглядеть так:
closeModalWindow() {
this.$emit('update:aa', false);
},
Второй вариант - управлять состоянием окна посредством директивы
v-model
. Надо будет заменить имя параметра с
aa
на
value
(ну или настроить
model):
props: ['aa', 'message'],
--->
props: [ 'value', 'message' ],
:class="{'is-active': aa}"
--->
:class="{ 'is-active': value }"
Переписать метод закрытия окна:
closeModalWindow() {
this.$emit('input', false);
},
Ну а в родительском компоненте станет так:
<modal-notifications v-model="isActive" :message="message"></modal-notifications>
Я же делаю из потомка this.$emit('my-event', this.isActive)
которое слушает родитель.
Никто ничего просто так не "слушает". Чтобы "слушать", надо назначить обработчик соответствующего события. Что и происходит посредством
@my-event="myEvent"
.
эмит выше вроде бы не нужен, но без него не работает
Чё? Какой ещё "эмит"? Нет "выше" никакого "эмита". Вы в родителе событие обрабатываете, а не порождаете.
И еще вопрос. Что делает:
myEvent: function(isActive) {
this.isActive = isActive
}
Почему оно должно что-то принимать? Можно же просто значение из data взять.
"Значение из data" брать бессмысленно - это и есть
this.isActive
. Который вам обновить надо. Обновить значением, которое присылает диалоговое окно. Значением, которое передаётся в (т.е., которое принимает) обработчик события.