你可能需要了解了组件生命周期
个人感觉有几种方案:
第一种直接利用ngAfterViewChecked()
,每当 Angular 做完组件视图和子视图或包含该指令的视图的变更检测之后调用。父组件的异步数据返回后会重新渲染子组件,而该方法则会有渲染后调用。该方法还可以结合rxjs的防抖
,避免一些不必要的重复运算。
第二种写法上麻烦一些,适用于子组件初始化后便不会变更的情况:
<app-child *ngIf="异步数据" [input]="异步数据"></app-child>
如果异步数据是对象,则可以初始化为null,此时当异步数据返回后才后构建子组件。所以可以在子组件中利用ngAfterViewInit()
,该方法由于只会在渲染完毕后调用一次,所以效率会提升。适用于input的值输入后则不变更的情况。
除此以外,或许还可以在组件中结合使用componentRef.detectChange()方法, @ViewChild()方法。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…