@pmozil

Как в дочернем элементе прослушать событие @click, которое произошло в родительском элементе, не используя Vuex?

Я совсем недавно начал изучать vue и начал писать простое приложение, которое состоит из двух компонентов. Приложение получает строку через инпут, обращается к API и на базе ответа строит ответ, который через v-for отображается во втором компоненте.

1 компонент это шапка приложения с инпутом и кнопкой поиска.
2 компонент - это обращение к файлу api.js и логика вывода ответа в этом же компоненте в элемент ul.

Если от родительского компонента к дочернему мы можем передать только props, а $emit работает только в другую сторону.
С помощью пропс, я передаю input.value, которое использую для создания запроса к API.

Собственно вопрос:
Как в ребенке прослушать событие клик, которое происходит в родителе и затем запустить запрос к API и отобразить результат.

Кроме того, как передать булевую переменную через пропс, по клику в родителе присваивает ей противоположное значение и в ребенке через watch запускать функцию запроса к апи, я не придумал.
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
@furashcka
Если я правильно понял, то вам нужно из род. компонента прокинуть событие, в данном случае click, в дочерний компонент, делается это так:

<template>
<div class="parent">
  <child-component ref="child" />

  <button @click="$refs.child ? $refs.child.onClick($event) : ``">Ok</button>
</div>
</template>


Соответственно род. компонент должен реализовать метод, onClick:
export default {
  name: `child-component`,

  methods: {
    onClick($event) {
      console.log(`$event :>>`, $event);
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы