次のコンポーネントがあるとしますChild
。
@Component({...})
class Child {
@Input() mySpecialFlag: boolean;
}
Child
スタンドアロンコンポーネントとして使用することもSpecial
、の動作を「スコープ」するコンポーネントでラップすることもできますChild
。をChild
スタンドアロンで使用する場合、ユーザーは[mySpecialFlag]
trueまたはfalseのいずれかに設定することを選択できます。ときChild
内で使用されてSpecial
、私がしたいSpecial
コンポーネントが入力を強制的に[mySpecialFlag]
次のようなものを経由して、真実であることを。
@Component({...})
class Special {
@ContentChild(Child) child;
...
ngAfterContentInit() {
this.child.mySpecialFlag = true;
}
}
上記の問題は、設定が[mySpecialFlag]
遅すぎることです。子のライフサイクルメソッドのいずれかが実行される前、または少なくとも子のライフサイクルメソッドが実行される前に、このフラグをtrueに設定できるようにしたいと思いますngAfterContentInit
。これは可能ですか?
ngOnInit
親のフラグの設定は機能しているように見えngOnInit
ます。フラグは子コンポーネントの前に設定されます。
ngOnInit() {
this.child.mySpecialFlag = true;
}
デモについては、このstackblitzを参照してください。
子コンポーネントにできるだけ早くアクセスする別の方法は、@ContentChild
デコレータをゲッター/セッタープロパティに関連付け、セッターに子フラグを設定することです。
export class ParentComponent {
private _child: ChildComponent;
@ContentChild(ChildComponent) get child(): ChildComponent {
return this._child;
}
set child(val: ChildComponent) {
this._child = val;
this._child.mySpecialFlag = true;
}
}
デモについては、このstackblitzを参照してください。_child
フラグを設定するためにプライベート変数とゲッターは必要ないことに注意してください。他の目的で子コンポーネントを参照する必要がある場合に備えて、それらを追加しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加