我使用动态组件加载器,“loadIntoLocation”变种。 但是,这是在Angular2的最新版本不再可用。
如何改造这个代码,并获得相同的功能?
this.dcl.loadIntoLocation(OpsComponent, this._el , "dynamicpanel").then((cmp)=>{
this.compRef = cmp
// input
cmp.instance.forwarddata = { name: "teddy" }
// output
cmp.instance.emitter.subscribe(event=>{ console.log(event) })
return cmp
})
如何重构这个,保持功能和使用新Query.read呢?
重大更改的通知:
核心:增加Query.read和删除DynamicComponentLoader.loadIntoLocation。 (efbd446)
DynamicComponentLoader.loadIntoLocation has been removed. Use
has been removed. Use
@ViewChild(“myVar的”,读作:ViewContainerRef) to get hold of a
ViewContainerRef at an element with variable
myVar`。
DynamicComponentLoader.loadIntoLocation已被删除。 使用@ViewChild(“myVar的”,读作:ViewContainerRef)在具有可变myVar的元素得到ViewContainerRef的保持。 然后调用DynamicComponentLoader.loadNextToLocation。 DynamicComponentLoader.loadNextToLocation现在需要ViewContainerRef而不是ElementRef的。
最终的解决方案
this.resolver.resolveComponent(ChildComponent).then((factory:ComponentFactory) => {
this.compRef = this.dynamicpanel.createComponent(factory)
// input
this.compRef.instance.forwarddata = { name: "Teddy"}
// output
this.compRef.instance.emitter.subscribe(event => { this.onChildEvent(event) })
});