コンポーネントを扱う際に、他のコンポーネントに何かが起こったことを通知しなければならない場合があります。ボタンがクリックされた、リストに項目が追加/削除された、またはその他の重要な更新が行われたなどです。このようなシナリオでは、コンポーネントは親コンポーネントと通信する必要があります。
Angularは、output() 関数を使用してこのタイプの動作を可能にします。
NOTE: 詳しくはアウトプットガイドのカスタムイベントをご覧ください。
このアクティビティでは、output() 関数を使用してコンポーネント間で通信する方法を学びます。
子コンポーネントから親コンポーネントへの通信パスを作成するには、クラスプロパティにoutput() 関数を使用して初期化します。
これで、コンポーネントは、親コンポーネントがリスンできるイベントを生成できます。emitメソッドを呼び出すことでイベントをトリガーします。
child.ts
class Child { ... onClick() { this.count++; this.incrementCountEvent.emit(this.count); }}
emit関数は、outputで定義した型と同じ型のイベントを発生させます。
さあ、実際に試してみましょう。次のタスクに従ってコードを完成させてください。
-
output()プロパティを追加するaddItemEventという出力プロパティを追加することでchild.tsを更新します。出力の型をstringに設定してください。 -
addItemメソッドを完成させるchild.tsでaddItemメソッドを更新します。次のコードをロジックとして使用してください。child.ts
addItem() { this.addItemEvent.emit('🐢');} -
Appテンプレートを更新するapp.tsでテンプレートを更新して、次のようなコードを追加することで、発生したイベントを購読します。<app-child (addItemEvent)="addItem($event)" />これで、「Add Item」ボタンをクリックするたびに、リストに新しいアイテムが追加されます。
やりましたね、これでコンポーネントの基本を理解できました。すばらしい👏
さらに学び続けることで、Angularの優れた機能をさらに活用できます。