Angular动态组件加载 - ExpressionChangedAfterItHasBeenCheckedError

Vác*_*ska 3 angular

我需要在运行时动态创建多个组件的实例.

我在互联网上找到了几个例子,包括StackOverflow和angular.io页面本身.

但是当我为组件模型赋值时,总是会收到异常ExpressionChangedAfterItHasBeenCheckedError.

即使是此功能的专用示例也会 引发相同的异常: Angular.io文章Plunker

错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化.上一个值:'undefined'.当前价值:'Bombasto'.看起来这个视图是在其父级及其子级被脏检查后创建的.它是在变更检测钩子中创建的吗?

我应该忽略这个还是可以/应该修复?

小智 9

这是因为您正在改变组件状态ngAfterViewInit.请参阅此处讨论行为的问题.

在您的情况下,您可以移动初始创建ngOnInit.

 ngOnInit() {
    this.loadComponent();
    this.getAds();
 }
Run Code Online (Sandbox Code Playgroud)

https://plnkr.co/edit/vAbkBIqrhpuuWadO4zGD?p=preview


use*_*316 5

在更一般的情况下

使用

this._changeDetectionRef.detectChanges();
Run Code Online (Sandbox Code Playgroud)

在更新到较晚组件状态的方法的末尾,

...不要忘记添加

private _changeDetectionRef : ChangeDetectorRef
Run Code Online (Sandbox Code Playgroud)

作为拥有您的方法的组件的构造函数的参数。

请参阅此处的讨论