2017-04-27 4 views
1

내가 코드에서 자신이 사용하는 구성 요소 템플릿의 인스턴스를 생성하는 지침이 있고 tempalte 치수를 변경됩니다의 innerHTML을 설정 : 이제지시어에서 구성 요소 인스턴스를 생성하는 동안 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