контекст
В Vue 2.0 документация и другие ясно указывают, что общение между родителями и детьми происходит через реквизит.
Вопрос
Как родитель сообщает своему ребенку, что событие произошло с помощью реквизита?
Должен ли я просто посмотреть реквизит называется событие? Это не правильно, как и альтернативы ( $emit
/ $on
для дочерних по отношению к родителям, а модель-концентратор для удаленных элементов).
пример
У меня есть родительский контейнер, и он должен сообщить своему дочернему контейнеру, что можно выполнять определенные действия в API. Мне нужно иметь возможность запускать функции.
источник
ref
вместо создания реквизита, который следит за его значением, а затем отправляет его другой функции в parent? Я имею в виду, что у него много дел, ноref
безопасно ли его использовать ? Спасибоref
безопасно. Как правило, это не рекомендуется, поскольку сообщество Vue предпочитает передавать состояние детям, а события - родителям. Вообще говоря, это приводит к более изолированным, внутренне согласованным компонентам (хорошо ™). Но если информация, которую вы передаете ребенку, действительно является событием (или командой), изменение состояния не является правильным шаблоном. В этом случае вызов метода с использованием aref
вполне подходит, и он не будет аварийно завершен или что-то в этом роде.То, что вы описываете, это изменение состояния в родительском. Вы передаете это ребенку через опору. Как вы предположили, вы бы
watch
эту опору. Когда ребенок выполняет действие, он уведомляет родителя черезemit
, и тогда родитель может снова изменить состояние.Показать фрагмент кода
Если вы действительно хотите передать события ребенку, вы можете сделать это, создав шину (которая является просто экземпляром Vue) и передав ее ребенку в качестве реквизита .
источник
v-model
для компонента, вы также можете легко сбросить значение, отправив соответствующее событие с меньшим количеством кода.prop
в дочернем элементе дополнительное свойствоdata
, затем добавитьwatch
... Было бы удобно, если бы была встроенная поддержка для передачи событий от родителя к ребенку. Такая ситуация встречается довольно часто.Вы можете использовать
$emit
и$on
. Используя код @RoyJ:HTML:
JavaScript:
Пример выполнения: https://jsfiddle.net/rjurado/m2spy60r/1/
источник
Если у вас есть время, используйте хранилище Vuex для наблюдения за переменными (он же состояние) или запускайте (он же диспетчеризация) действие напрямую.
источник
Не понравился подход события-шины, использующий
$on
привязки у ребенка во времяcreate
. Зачем? Последующиеcreate
вызовы (я используюvue-router
) связывают обработчик сообщений более одного раза, что приводит к нескольким ответам на сообщение.Ортодоксальное решение передачи реквизита от родителя к ребенку и помещения в ребенка наблюдателя за имуществом работало немного лучше. Единственная проблема заключается в том, что ребенок может действовать только на переход ценностей. Передача одного и того же сообщения несколько раз требует какой-то бухгалтерии для принудительного перехода, чтобы ребенок мог получить изменения.
Я обнаружил, что если я оберну сообщение в массив, он всегда будет вызывать дочерний наблюдатель - даже если значение останется неизменным.
родитель:
Ребенок:
HTML:
источник
Простой разъединенный способ вызова методов на дочерних компонентах заключается в отправке обработчика из дочернего элемента и последующем вызове его из родительского компонента.
Родитель отслеживает дочерние функции-обработчики и при необходимости вызывает их.
источник
Приведенный ниже пример говорит сам за себя. где ссылки и события могут использоваться для вызова функции от и к родителю и потомку.
источник
Я думаю, что мы должны рассмотреть вопрос о необходимости использования родителями методов ребенка. Фактически, родителям не нужно относиться к методу child, но они могут рассматривать дочерний компонент как компонент FSA (конечный автомат) .Parents контролировать состояние дочернего компонента. Так что для решения достаточно посмотреть изменение статуса или просто использовать функцию вычисления
источник
Вы можете использовать ключ для перезагрузки дочернего компонента, используя ключ
Если вы хотите перезагрузить компонент с новым фильтром, при нажатии кнопки отфильтруйте дочерний компонент
и использовать фильтр, чтобы вызвать функцию
источник