Angular动态组件加载 - ExpressionChangedAfterItHasBeenCheckedError

时间:2017-05-11 14:13:58

标签: angular

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:9)

这是因为您正在改变ngAfterViewInit中的组件状态。请参阅issue here讨论行为。

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

 ngOnInit() {
    this.loadComponent();
    this.getAds();
 }

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

答案 1 :(得分:3)

在更一般的情况下

使用

this._changeDetectionRef.detectChanges();

在方法结束时更新到组件状态的后期,

...不要忘记添加

private _changeDetectionRef : ChangeDetectorRef

作为拥有方法的Component的构造函数的参数。

参见discution here

相关问题