今回は、コンポーネントに定義できるemitsオプションについて紹介します。
emitsオプション
Vue.jsのバージョン3では、コンポーネントのプロパティを表すpropsオプションと同様に、イベントを表すオプションとしてemitsが追加されました。
emitsオプションを使用することで、コンポーネントが親に発行できるイベントを定義することができます。
emitsオプションはコンポーネントから出力できるカスタムイベントのリスト(ハッシュ)です。
emitsオプションには、単純な配列ベースの構文と、イベントを検証できるオブジェクトベースの構文が利用できます。
emitsオプションの構文
配列ベースの構文では、emitsオプションにイベント名を定義します。
1 2 3 4 5 6 7 8 9 |
app.component('my-component', { emits: ['created-event', 'mounted-event'], created() { this.$emit('created-event') }, mounted() { this.$emit('mounted-event') } }) |
オブジェクトベースの構文では、各プロパティの値にnull、または検証関数のいずれかを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
app.component('reply-form', { emits: { // 検証なし click: null, // 検証あり submit: function(payload) { if (payload.email && payload.password) { return true; } else { console.warn(`submitイベントのpayload(ペイロード)が無効です。`) return false; } } } }) |
検証関数は、$emitでイベントを発行する時に渡される引数を受け取ります。
例えば、this.$emit(‘click’, 0);が呼び出された場合は、clickイベントに対応する検証関数は引数に「0」を受け取ります。
emitsオプションと$attrsプロパティ
emitsオプションに宣言されていないイベントのリスナーは、コンポーネントの$attrsプロパティに含まれるようになります。
emitsオプションに宣言されているイベントのリスナーは、コンポーネントの$attrsプロパティには含まれず、除外されます。