2017-05-05 10 views
3

私はアンギュラ4にコンポーネントを作成しようとしていますが、私は解決できないような非常に奇妙な問題にぶち当たっています。ngAfterViewInitの変数を代入するTypescriptが機能しない

私はシンプルなboolean iは、コンポーネントの@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に等しいです。しかし、私はそれのようなコンポーネントでこれを使用してください

その後、コンポーネントが完全に壊れます。主に、それは私も

<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'と一緒に働いていたのですが、前に何が間違っていたのか分かりませんでした。 –

関連する問題