如何访问" root"来自组件的ViewContainerRef

时间:2016-09-27 11:48:02

标签: angular dependency-injection components

我正在创建一个"组件工厂"帮助我动态创建组件。这个工厂用于创建组件; 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真的很陌生,所以也许我真的偏离轨道,应该以其他方式解决这个问题。

2 个答案:

答案 0 :(得分:2)

您可以实现一些模块,为任何感兴趣的人提供根组件引用。

首先创建该模块,将其放入注射器。

因为这样做需要来自应用程序根目录中的注入器的模块,你正在引导的模块并用它注册你的根组件(我担心最接近root的东西,因为你可以得到窗口只是没有'实现ElementRef)。

完成后,您可以将模块注入任何子组件,请求根元素引用并随意使用它。

答案 1 :(得分:1)

您可以在根组件中保存视图参考,然后注入ApplicationRef。看看这个问题:

https://github.com/angular/angular/issues/6446#issuecomment-173459525

它描述了如何准确地完成它。