#vue.js
Вопрос:
Я не знаю, как еще это назвать. У меня есть файл, давайте назовем его parent.vue. в нем есть следующее
РОДИТЕЛЬ.vue
<template>
<input-box
:room="currentRoom"
v-on:messagesent="getMessages"
class="dark:bg-gray-800 px-6 pb-6 pt-4 dark:border-t-2 dark:border-gray-600 bottom-0 sticky" />
</template>
method:
getMessages() {
axios.get('/chat/room/' this.currentRoom.id '/messages')
.then(response => {
this.messages = response.data;
})
.catch(error => {
console.log(error);
})
},
Затем у меня есть ребенок, который звонит v-on в любое время, когда что-то происходит. Проблема в том, что мне нужно назвать это от ребенка внутри ребенка. «он же внук» Внутри РЕБЕНКА, которого я имею внутри метода
this.$emit('messagesent');
Как я могу сделать то же самое внутри внука?
Ответ №1:
Что ж, это был пустой момент с моей стороны.
С помощью
this.$parent.$emit()
Дал мне возможность отправить его по цепочке. Это именно то, чего я хотел.
Ответ №2:
Нет, если вы хотите сохранить инкапсуляцию. Бабушка и дедушка не должны знать о внуке. Он знает о родителе, но не о том, что есть подкомпоненты или сколько их. В принципе, вы можете поменять одну реализацию дедушки и бабушки на другую, у которой нет нескольких слоев. Или имеет еще больше слоев, чтобы добраться до ребенка. И вы могли бы поместить ребенка в компонент верхнего уровня.
Вы уже знаете о понятии глобальной шины событий. Однако автобус не обязательно должен быть глобальным. Вы можете передать его по цепочке реквизита. (Вы могли бы использовать самого дедушку и бабушку в качестве автобуса, но это открыло бы его для своих детей; лучшая гигиена, чтобы сделать настоящий автобус.)
Это отличает компоненты верхнего уровня от подкомпонентов: подкомпонент получит поддержку шины для выполнения функций компонента верхнего уровня, которые он помогает реализовать. Компонент верхнего уровня создаст шину.
Для получения более подробной информации перейдите по ссылке ниже
Комментарии:
1. В данном конкретном случае я использую модал, который появляется для добавления данных к ребенку. поэтому я меньше беспокоюсь об инкапсуляции. Когда я завершу свой MVP и рефакторинг некоторых компонентов, я вернусь к этому, но пока это достигает моей цели
2. Это было просто для вашей информации, все, что я хотел подчеркнуть, это то, что, когда иерархия выходит за рамки одного уровня, лучше использовать шину событий