2017-05-05 4 views
3

4 번 구성 요소를 만들려고하는데 문제가 해결되지 않은 매우 이상한 문제가 발생했습니다.ngAfterViewInit에서 변수를 지정하는 Typescript가 작동하지 않습니다.

나는 간단한 boolean 내가이 구성 요소에 대한 @Input

@Input('type') inputType: string = 'text'; 
showTextInput: boolean = false; 
... 
ngAfterViewInit() { 
    console.log('input', this.inputType); 
    this.showTextInput = this.inputType === 'text' ? true : false; 
    console.log('after condition', this.showTextInput); 
} 

이 HTML을 기반으로 설정하려고하는 가지고는 현재의 형태로는 해야 기본 너무

<ts-input-item formControlName="name" 
       [control]="programForm.controls.name" 
       [label]="'Name'" 
       (onUpdateClicked)="updateItem($event,'Name','name')"> 
</ts-input-item> 

입니다 text을 입력하십시오. 이는 다소 혼란 스럽습니다. 아래는 console.log 인화입니다.

enter image description here

는 이제 this.showTextInputtrue 같다. 그러나 만약 내가 그런 다음 구성 요소에서 이것을 사용하면

<ion-input #input 
      [type]="inputType" 
      [disabled]="isSelect" 
      (keyup)="itemValueChanged(input.value)" 
      (keyup.enter)="itemUpdate()" 
      *ngIf="showTextInput"> 
    </ion-input> 

그런 다음 구성 요소가 완전히 중단됩니다. 상위 구성 요소의 형식은 이름이 전달되는 처리하지 않습니다,하지만 난 심지어

<div *ngIf="showTextInput"> foobar </div> 

처럼 표시되지 것 foobar 텍스트 뭔가를 추가하고, 이상이 없을 경우 간단히 말하면로서 주로가 표시되지 않기 때문에. 올바른 수명주기 후크에서 패스를 처리하고 있습니까?

+1

는 브라우저 콘솔에서 오류를받을 수 있나요? –

+0

아니오, 단순한 예제가 아니라'ion-input'의'* ngIf'에 대해서'name' 폼 요소가 사용 가능하지 않다는 반응적인 형태의 문제입니다 –

답변

3

호출 변경 감지 명시 적으로 도움이 될 수 있습니다 :

constructor(private cdRef:ChangeDetectorRef) {} 

ngAfterViewInit() { 
    console.log('input', this.inputType); 
    this.showTextInput = this.inputType === 'text' ? true : false; 
    console.log('after condition', this.showTextInput); 
    this.cdRef.detectChanges(); 
} 
+0

고맙습니다. 'ChangeDetectorRef'를 얻으려고했지만 내가 검색 할 때'OnChanges'를 구현할 수 있다는 것을 보았습니다. 나는 그것이 얼마나 다른지는 잘 모르지만 나는 더 깊이 잠수 할 것입니다. 건배. –

+0

'ngOnChanges'에서 모델을 업데이트 할 때는 보통'cdRef.detectChanges()'가 필요합니다. ''ChangeDetectorRef''를 가져 오는 것이 무엇을 의미합니까? '@ angular/core'에서 가져 오기만하면됩니다. –

+1

그래, 내가'ChangeDetectorRef'와 함께 일하고 있는데, 전에 내가 뭘 잘못했는지 모르겠다. –