我的方案如下: 我有3个组件:MainComponent,ComponentA,ComponentB
MainComponent是动态加载ComponentA。 ComponentA有一个按钮,onClick调用MainComponent.addComponent(ComponentB)
export class MainLayout
{
constructor(private dcl: DynamicComponentLoader,private elementRef:ElementRef) {
///this will work fine
this.dcl.loadIntoLocation(ComponentA,elementRef);
}
addComponent(component:Type) {
///this will fail
this.dcl.loadIntoLocation(component, this.elememtRef,'child1');
}
}
我得到的错误: 您可以看到错误来自elementRef对象....
Uncaught EXCEPTION:评估“点击”时出错 原始异常:TypeError:无法读取undefined的属性'_view' 原装STACKTRACE: TypeError:无法读取undefined的属性'_view' at Object.internalView(http://localhost:63342/decisionApp/decision-modeling-ui/node_modules/angular2/bundles/angular2.dev.js:6236:19) 在AppViewManager_.getNamedElementInComponentView(http://localhost:63342/decisionApp/decision-modeling-ui/node_modules/angular2/bundles/angular2.dev.js:11240:33) 在DynamicComponentLoader_.loadIntoLocation(http://localhost:63342/decisionApp/decision-modeling-ui/node_modules/angular2/bundles/angular2.dev.js:14547:62) 在MainLayout.resolveComponent(http://localhost:63342/decisionApp/decision-modeling-ui/app/playground/ui-composition/mainLayout.js:32:18) 在ComponentsList.onClick(http://localhost:63342/decisionApp/decision-modeling-ui/app/playground/ui-composition/ComponentsList.js:25:20)
答案 0 :(得分:0)
您的描述不是很清楚,因为您没有告诉我们有关您组件的失败消息和其他一些事情。所以我只能猜测:
组件,this.elememtRef,' child1'在调用addComponent时不存在,因此它会失败?也许ComponentA尚未完全加载? 我还假设"组件"是指ComponentB?
答案 1 :(得分:0)
好的,我想通了, 我有不同objectRefs的原因是我在ComponenetA配置中设置了一个provider:[MainComponent]。 这为我创建了一个MainComponent的新实例。 因此,在构造函数中注入了一个新的ElementRef实例。