来自ngAfterViewInit的角度文档
ngAfterViewInit()
Respond after Angular initializes the component’s
views and child views.
Called once after the first ngAfterContentChecked().
A component-only hook.
我有一个嵌套在组件T内的组件C.
组件C实现以下钩子.
ngAfterViewInit(): void {
console.log("afterViewInit");
debugger;
}
组件T是一个表 – 只要用户单击一个单元格,就会对其进行更改检测.
组件C可以在表格单元格中找到.
每当我单击单元格时,我都会看到在控制台中登录后的ViewInit.
我的堆栈跟踪如下:
DynamicComponentWrapper.ngAfterViewInit
(dynamic-component-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.
这可能是由于一些外部指令与子组件一起使用,您提到的组件中的值也会与其绑定.
相关文章:
Angular 7: ChangeDetectorRef detectChanges() causes infinite loop when called from inside a subscription