什么时候可以检查是否已给出'@Input()'?

时间:2019-05-23 12:11:02

标签: angular typescript

我想检查是否有另一个使用我的组件的组件给定了@Input()。但是我不知道什么时候可以检查?我应该在“ ngOnInit”,“ ngAfterViewInit”或其他内容中对其进行检查吗?

3 个答案:

答案 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)

您可以同时检入ngOnInitngAfterViewInit,但是您不确定是否会有预期的数据(输入数据可能来自HTTP调用,或者是某些计算的结果) )。

我建议实现OnChanges接口并使用ngOnChanges,因为它会在任何输入数据更改时触发。

从文档中

  

在默认更改后立即调用的回调方法   检测器已检查数据绑定属性,如果至少一个具有   更改,并且在检查视图和内容子级之前。

https://angular.io/api/core/OnChanges

答案 2 :(得分:0)

您到底想使用@Input()做什么? 因为如果您尝试通过各种组件(子代,兄弟姐妹和父代)传递输入,我会建议使用服务,这也比输入更容易检查(以我个人的观点)。

https://angular.io/tutorial/toh-pt4