每次changeDetection后调用Angular ngAfterViewInit

时间:2017-05-22 09:53:16

标签: angular

来自ngAfterViewInit

的角度文档
  

ngAfterViewInit()

     

在Angular初始化组件后做出响应   观点和儿童观点。

     

在第一个ngAfterContentChecked()之后调用一次

     

仅限组件的挂钩。

我有一个组件 C ,它嵌套在组件 T

组件 C 实现以下挂钩。

ngAfterViewInit(): void {
        console.log("afterViewInit");
        debugger;
    }

组件 T 是一个表 - 只要用户单击一个单元格,就会对其进行更改检测。

组件 C 可以在表格单元格中找到。

每当我点击单元格时,我都会在控制台中看到afterViewInit

我的堆栈跟踪如下:

  

DynamicComponentWrapper.ngAfterViewInit   (动态成分-wrapper.ts:72)   的 View_TableComponent18.detectChangesInternal   (/TableModule/TableComponent/component.ngfactory.js:904)   AppView.detectChanges(view.js:425)DebugAppView.detectChanges   (view.js:620)ViewContainer.detectChangesInNestedViews   (view_container.js:67)View_TableComponent17.detectChangesInternal   (/TableModule/TableComponent/component.ngfactory.js:962)   AppView.detectChanges(view.js:425)DebugAppView.detectChanges   (view.js:620)ViewContainer.detectChangesInNestedViews   (view_container.js:67)View_TableComponent15.detectChangesInternal   (/TableModule/TableComponent/component.ngfactory.js:1043)   AppView.detectChanges(view.js:425)

问题

是什么导致在父更改时调用ngAfterViewInit?组件是否被重新呈现 - 即从DOM中删除并替换?

我该如何防止这种情况? - 即 - 我如何确保只调用一次ngAfterViewInit

更新 更改组件C 组件T 后,使用 ChangeDetectionStrategy.OnPush afterViewInit仍会在任何更改时被调用。

1 个答案:

答案 0 :(得分:1)

这可能是由于子组件使用了一些外部指令,这些子指令也绑定了您提到的组件中的值。

相关帖子:

Angular 7: ChangeDetectorRef detectChanges() causes infinite loop when called from inside a subscription