コンポジション関係にあるコンポーネント間の操作


はじめに

Angularの2つのコンポーネントがコンポジション関係にあるときの操作についてです。
所有側コンポーネントをOwnerComponent、部品側コンポーネントをPartComponentとして記載します。

所有側から部品側へのデータの受け渡し

owner-component.html
<app-owner>
  <!-- 部品側のプロパティと所有者側のプロパティを関連づける -->
  <!-- リアルタイムに値が同期する -->
  <app-part [partProperty]="ownerProperty"></app-part>
</app-ower>
owner-component.ts
export class OwnerComponent {
  ownerProperty: string;
}
part-component.ts
export class PartComponent {
  <!-- @Input()が必要 -->
  @Input() partProperty: string;
}

所有側から部品側へのfunction呼び出し

owner-component.html
<app-owner>
  <!-- #で任意の名前を付ける -->
  <app-part #part></app-part>
</app-owner>
owner-component.ts
export class OwnerComponent {
  // #で付けた名前をプロパティに関連づける
  @ViewChild('part') private partComponent: PartComponent;

  exampleFunction() {
    // 部品側への呼び出し
    this.partComponent.onReceiveEvent('foo');
  }
}
part-component.ts
export class PartComponent {
  onReceiveEvent(variable: string) {
    // ...
  }
}

部品側から所有側へのイベント通知

owner-component.html
<app-owner>
  <app-part (voted)="onVoted($event)"></app-part>
</app-owner>
owner-component.ts
export class OwnerComponent {
  onVoted(variable: string) {
  }
}
part-component.ts
export class PartComponent {
  @Output() voted = new EventEmitter<string>();

  vote() {
    const variable: string = '渡す値';
    this.voted.emit(variable);
  }
}

さいごに

役に立ちましたら、いいねをお願いします。