我正在创建一个"组件工厂"帮助我动态创建组件。这个工厂用于创建组件; PopOvers,Modals,Overlays等
它有一个附加方法来创建组件:
attach<T>(component: ComponentType<T>, viewContainerRef: ViewContainerRef): ComponentRef<T> {
let componentFactory =
this.componentFactoryResolver.resolveComponentFactory(component);
let ref = viewContainerRef.createComponent(
componentFactory,
viewContainerRef.length,
viewContainerRef.parentInjector);
return ref;
}
该方法接受我想要创建的Component的类型,以及它应该添加到哪个ViewContainer。
从Component内部调用此方法时,我使用Components ViewContainer调用它。这很好用!
但是我希望能够指定是否应该在&#34; root&#34;中创建新的Component。 ViewContainer即。 HTML的正文。
这可能吗?我对Angular2真的很陌生,所以也许我真的偏离轨道,应该以其他方式解决这个问题。
答案 0 :(得分:2)
您可以实现一些模块,为任何感兴趣的人提供根组件引用。
首先创建该模块,将其放入注射器。
因为这样做需要来自应用程序根目录中的注入器的模块,你正在引导的模块并用它注册你的根组件(我担心最接近root的东西,因为你可以得到窗口只是没有'实现ElementRef)。
完成后,您可以将模块注入任何子组件,请求根元素引用并随意使用它。
答案 1 :(得分:1)
您可以在根组件中保存视图参考,然后注入ApplicationRef
。看看这个问题:
https://github.com/angular/angular/issues/6446#issuecomment-173459525
它描述了如何准确地完成它。