我想检查是否有另一个使用我的组件的组件给定了@Input()。但是我不知道什么时候可以检查?我应该在“ ngOnInit”,“ ngAfterViewInit”或其他内容中对其进行检查吗?
答案 0 :(得分:1)
您可以通过类似以下方式实现ngOnChanges
来进行检查:
export class MyComponent implements OnChanges {
@Input() input;
ngOnChanges(changes: SimpleChanges): void {
if (changes.hasOwnProperty('input')) {
if (changes['input'].isfirstChange()) { // AKA initialization by angular
doStuff();
} else { // Real change due to your logic
doMoreStuff();
}
}
}
}
答案 1 :(得分:0)
您可以同时检入ngOnInit
或ngAfterViewInit
,但是您不确定是否会有预期的数据(输入数据可能来自HTTP调用,或者是某些计算的结果) )。
我建议实现OnChanges
接口并使用ngOnChanges
,因为它会在任何输入数据更改时触发。
从文档中
在默认更改后立即调用的回调方法 检测器已检查数据绑定属性,如果至少一个具有 更改,并且在检查视图和内容子级之前。
答案 2 :(得分:0)
您到底想使用@Input()做什么? 因为如果您尝试通过各种组件(子代,兄弟姐妹和父代)传递输入,我会建议使用服务,这也比输入更容易检查(以我个人的观点)。