2017-04-27 74 views
1

我有一個在代碼中創建,他使用組件模板實例的指令,並設置它的innerHTML,這將改變tempalte尺寸:如何等待ngAfterViewInit()從指令創建組件的實例時運行?

var factory = this.resolver.resolveComponentFactory(MyComponentTemplate); 
    this.templateComponent = this.viewContainerRef.createComponent(factory); 

    this.templateComponent.instance.htmlStr = anyText; 

現在,這裏的問題。在這個階段,我會得到不確定的部件尺寸:

console.log(this.templateComponent.instance.width); //undefined 
console.log(this.templateComponent.instance.height); //undefined 

在調試我發現我的部件運行ngAfterViewInit()只後,才把我可以閱讀我的指令分量模板寬度和高度,使用該值。

有沒有一種方法,我可以告訴我的指令要等到ngAfterViewInit()結束, 比做什麼,我從我的指令與信息,我正在尋找需要。

+1

爲什麼需要在'ngAfterViewInit'中?你爲什麼不把它放在'this.createComponent()'之後?您可能需要首先注入'ChangeDetectorRef'並調用'cdRef.detectChanges()'。 –

+1

你絕對正確。調用detectChanges後,它工作。非常感謝,你爲我節省了很多錢 – AngularOne

回答

1
constructor(private cdRef:ChangeDetectorRef) {} 

... 

    var factory = this.resolver.resolveComponentFactory(MyComponentTemplate); 
    this.templateComponent = this.viewContainerRef.createComponent(factory); 
    this.templateComponent.instance.htmlStr = anyText; 

    this.cdRef.detectChanges(); // run change detection immediately 

    console.log(this.templateComponent.instance.width); //undefined 
    console.log(this.templateComponent.instance.height); //undefined 
相關問題