在一个博客上我读到:
ngonit生命周期钩子保证您的绑定
随时可用。
使用异步管道传递参数时也是这样吗?例如:

<myComponent [myInput]="myObservableVariable | async">
 ...
</myComponent>

组件会在启动ngonit之前等待变量被解析吗?
这意味着有时,当数据需要一段时间才能解析时,组件加载可能需要很长时间。

最佳答案

简而言之,答案是不,组件实例化不会延迟,如果在第一个变更检测周期之前观测值还没有被解析,那么您将无法在onInit中获得解析值。
比较以下内容:

  // the value will be available in onInit
  obs = Observable.from([33]);

  // the value will not be available in onInit (you'll get null)
  obs = new Observable(observer => {
    setTimeout(() => {
      observer.next(33);
    }, 1000);

    setTimeout(() => {
      observer.complete();
    }, 3000);
  });


<child-component [inputproperty]="obs"><child-component>

下面是当您使用async管道时在引擎盖下发生的情况:
async管道有一个transform方法,该方法在每个更改检测周期中都会调用。此方法负责返回将传递给子组件的可观察值的当前解析值。如果在第一个变更检测周期之前观测值还没有被解析,那么子组件将在null中得到onInit
然后,在下一个摘要周期中,绑定将被更新,因为transform将返回解析值。有趣的是,观测值的分辨率可以触发变化检测周期。您可以在onChanges生命周期挂钩中获取绑定的新值。

关于angular - Angular2 @Input来自异步管道-ngOnInit中的可用性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44044974/

10-11 23:24
查看更多