Я создаю структуру формы в vue. У меня есть компоненты для каждого типа поля. Каждый компонент типа поля использует это. $ Emit для обмена изменениями с родительским компонентом.Как поймать события на нескольких дочерних компонентах Vue
Я могу вызвать события в родительском компоненте, используя V-на директивы следующим образом:
<template>
<div v-if="fieldsLoaded">
<form-select :field="fields.title" v-on:updated="validate" ></form-select>
<form-input :field="fields.first_name" v-on:updated="validate" ></form-input>
</div>
</template>
Однако, я не хочу, чтобы вручную указать, что каждый компонент должен вызывать метод validate
индивидуально ,
Как я могу заставить родительский компонент прослушивать updated
на всех его дочерних компонентах?
Редактировать: Я ищу что-то вроде ниже, хотя $ на только улавливает излучает, которые происходят в пределах одного компонента, а не своих детей
created: function(){
this.$on('updated',validate)
}
Вы ссылаетесь на this.validate(), но это не требует определения метода проверки в этом дочернем компоненте? Мое намерение состояло в том, что я бы сохранил логику проверки в родительском компоненте, чтобы он мог делиться между различными дочерними компонентами. – rhoward
Извините, я просто понял вашу мысль - вы говорите, что я могу передать метод проверки из родителя. Я думаю, это сработает, но это не уменьшит мой код. Я уже работал, как в моем исходном примере, где я явно запускаю метод validate в родительском для каждого поля. То, к чему я стремлюсь, является чем-то общим, которое ловит * все * выбросы валидации от своих детей, не требуя явного поля в полевых условиях. – rhoward
@ rhoward По моему подходу вы можете перемещать код шоу, связанный с сообщением об ошибке и т. Д. Внутри этих компонентов. Что касается вашей точки, связанной с повторным использованием кода, вы можете посмотреть на [mixins] (https://vuejs.org/v2/guide/mixins.html#ad), где вы можете попробовать установить общую функциональность и повторно использовать ее в компонентах. – Saurabh