假设我具有以下组件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]
为时已晚。我希望能够在孩子的任何生命周期方法运行之前或至少在孩子的ngAfterContentInit
运行之前将此标志设置为true。这可能吗?
答案 0 :(得分:2)
在父级ngOnInit
中设置标志似乎是可行的:该标志设置在子级组件ngOnInit
之前。
ngOnInit() {
this.child.mySpecialFlag = true;
}
有关演示,请参见this stackblitz。
一种尽早访问子组件的替代方法是将@ContentChild
装饰器与getter / setter属性相关联,并在setter中设置子标志:
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;
}
}
有关演示,请参见this stackblitz。请注意,不需要使用私有变量_child
和getter来设置标志。我添加了它们,以防您出于其他目的需要引用子组件。
答案 1 :(得分:0)
我相信您可以使用ngOnInit方法。请参考此链接以解释角度生命周期挂钩:https://angular.io/guide/lifecycle-hooks