私は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()を参照していますが、この子コンポーネント内でvalidateメソッドを定義する必要はありませんか?私は、バリデーションロジックを親コンポーネントに保存し、さまざまな子コンポーネント間で共有できるようにするつもりでした。 – rhoward
申し訳ありませんが、私はちょっとあなたのことを理解しています - 私は親から検証メソッドを渡すことができると言っています。私はそれがうまくいくと思いますが、私のコードは何も減らされません。私はすでに、各フィールドの親でvalidateメソッドを明示的にトリガする、私の元の例のように動作しています。私が目指しているのは、フィールドから明示的にフィールドを作成する必要なしに、すべての子どもからの検証のすべての排出をキャッチする一般的なものです。 – rhoward
@rhoward私のアプローチでは、これらのコンポーネントの中にエラーメッセージなどに関連するコードを表示することができます。コードの再利用に関するあなたの点に関しては、[mixins](https://vuejs.org/v2/guide/mixins.html#ad)を見ることができます。ここでは、共通の機能を配置してコンポーネントに再利用することができます。 – Saurabh