2017-01-12 42 views
0

我已經有一個包裝組件加載多個組件,通過使用createComponent和我想追加一個畫布元素的每個組件。現在我認爲有幾種方法可以做到這一點,並且每種做法我都會陷入困境。Angular2指令等待組件被初始化

1號

在包裝組件訪問的子組件(我已經無法在this.cmpRef = this.target.createComponent(factory);這樣做,因爲nativeElement是私有財產),我需要知道的子組件被初始化(所以我必須爲此使用服務)。

2號

創建一個指示,並在畫布元素與加載的組件:<canvas projectCanvas class="overlay"></canvas>現在我已經能夠通過指令本身來訪問模板。 (這很棒但很重複)。

只有這個指令是在組件的視圖被初始化之前構造的,所以我必須創建一個服務來跟蹤組件的狀態。

實際問題

你會如何處理這個?在我看來,沒有逃避服務,或者有辦法檢查視圖是從包裝器組件初始化的嗎?

---------------更新------------------

試圖使版本一個服務,但ngAfterViewInit/ngOnInit似乎當組件由createComponent看到Pliunkr

回答

0

你是怎樣嘗試ngAfterViewInit加載不工作?

你有沒有嘗試在包裝中注入兒童組件?

@Component({...}) 
export class WrapperComponent implements AfterViewInit{ 

    @ViewChildren(InnerComponent) innerComponents : QueryList<InnerComponent>; 

    ngAfterViewInit(){ 
    this.innerComponents.forEach(c => c.doSomething()); 
    } 

} 
+0

嗨,感謝您的回覆,在使用'createComponent'加載子組件時'ngAfterViewInit'在加載'createComponent'時不起作用,那麼包裝組件就不會工作。你的例子中的viewChild返回undefined,因爲我猜這個孩子還沒有初始化。 – LVDM

+0

看到這個http://plnkr.co/edit/Wc3aIpC2S8lFOxAJgG9J?p=preview – LVDM

+1

在你的plunkr中,正確調用了C2的ngAfterViewInit()。但是他們是一個拼寫錯誤,你指定爲'initialsed'而不是'initialised'。 – Melou