2016-09-27 64 views
1

我正在創建一個「組件工廠」來幫助我動態創建組件。該工廠用於創建組件,如; PopOvers,情態動詞,疊加等如何從組件中訪問「根」ViewContainerRef

它有一個附加的方法來創建組件:

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; 
} 

的方法接受我要創建的組件的類型,什麼ViewContainer應該加入。

當從一個組件內調用這個方法,我把它與組件ViewContainer。這工作正常!

但我想必須指定,如果新的組件應該在「根」 ViewContainer即創建的選項。 HTML的主體。

這可能嗎?我對Angular2真的很陌生,所以也許我真的走的不正確,應該以其他方式解決。

回答

2

您可以實現一些模塊,這是有興趣的人提供根組件的參考。

所以首先創建該模塊,將其放入噴射器。

因爲這樣做需要你的應用程序根目錄中的注入器模塊,你需要引導並註冊你的根組件(我恐怕最接近根源的地方,因爲你可以得到的窗口只是沒有不執行ElementRef)。

隨着做到這一點,你可以注入,在所有子組件模塊,索要根元素參考,做任何你用它討好。