で親コンポーネントの変化を購読します。この子は動的に作成され、任意のタイプであることができます。は、私は子コンポーネントのリストをホストする親コンポーネントをした角度
親コンポーネントのホストとしてng-container
を使用し、子コンポーネントをComponentFactoryResolver
で作成し、 `` `(component.instance as any).idを使用して子コンポーネントのいくつかのプロパティを更新します。 = host.id; ``
ここでは、親コンポーネントのコードは、(それはいくつかの行のテーブルの)である。
<tr class="table-collapse__item" [class.active]="company === selected">
<td [attr.colspan]="getItemColspan()">
<ng-container host [id]="name" [selected]="isSelected"></ng-container>
</td>
</tr>
host
ディレクティブ
@Directive({
selector: '[host]'
})
export class Host implements OnChanges {
@Input() id: any;
@Input() selected: boolean;
constructor(public viewRef: ViewContainerRef) {}
}
であります
、最終的にどのようにコンポーネントを作成し、プロパティ今
@ViewChildren(Host) hosts: QueryList<Host>;
constructor(private resolver: ComponentFactoryResolver,
private cd: ChangeDetectorRef) {}
ngAfterViewInit() {
if (this.hosts) {
const componentFactory = this.resolver.resolveComponentFactory(this.inner);
this.hosts.forEach((host: Host) => {
const component = host.viewRef.createComponent(componentFactory);
(component.instance as any).id = host.id;
(component.instance as any).selected = host.selected;
});
this.cd.detectChanges();
}
}
を更新するには、私の質問。私は、その特性の変化に反応する子コンポーネントを必要とするが、そのproperiesが入力ちょうど基本的な性質ではないとして、私はchildComponent内ngOnChangesを使用can't。それで、子コンポーネントから親コンポーネントの変更にサブスクライブできる方法はありますか?
私はホストディレクティブでngOnChangesを使用してコンポーネントのプロパティを更新しますが、どのように、子コンポーネントにいくつかのコードをトリガすることができますか?
私はそれをテストするplunkerを持っています。 data1、data2、data3、またはdata4をクリックすると、下の行が折りたたまれたり展開されたりするはずです。
ありがとうございました。
ありがとう! innerComponentsは[this.id] .ngOnChangesあなたはあなたの答えで提案innerComponents配列されてfunction'''ではありません: '' '例外TypeErrorがいることをやったときに、私はエラーを取得します私のChildComponentはOnChangesを実装していますが、方法です。 – David
'this.id'とは何ですか?コンポーネントには実際に 'ngOnChanges'メソッドがありますか?また '.instance'が見つかりません –
申し訳ありませんが、あなたは正しい、インスタンスが見つかりませんでした。ありがとうございます! – David