2016-09-28 9 views
4

私はこの問題に関して同様の質問を見ましたが、答えの中で私にとってうまくいかなかったのです。私は、非同期タスクが完了するたびに変化するブール値を持っていますが、いつでもngonchagesが変化しないということは奇妙です。以下は私のコードです:入力(変更の確認の一部)として扱わanglejsでブール値が変更されたときにngOnchangesが起動しないのはなぜですか?

import { 
    Component, 
    OnChanges, 
    SimpleChange 
} from '@angular/core'; 
export class HomePage implements OnChanges { 

    isLoaded: boolean; 

    constructor() { 
     this.isLoaded = false; 
     this.loadData(); 
    } 

    loadData() { 
     setTimeout(() => { 
      this.isLoaded = true; 
      console.log(this.isLoaded); 
     }, 3000); 
    } 

    ngOnChanges(changes) { 
     console.log("There has been a change ", changes); //this is not firing 
    } 
} 
+0

を 'isLoaded'がinput'財産@ビュー' bindings'/'にあるはず... –

答えて

2

ngOnChangesでマークする必要がありますAngulars変化検出機構のライフサイクルコールバックされ、それがときに呼び出されます@Input()は、あなたが持っている場合は

を結合Angularsデータによって変更される

@Input() isLoaded: boolean; 
親コンポーネント210

<home-page [isLoaded]="someValue"> 

someValueが変更され、その後、検出更新isLoadedを変更しngOnChanges()を呼び出します。

あなたのケースのために最も簡単な解決策は、おそらくゲッターの代わりにプロパティを使用している:私が知っているいずれかの

_isLoaded: boolean; 
set isLoaded(value:bool) { 
    this._isLoaded = value; 
    this.doSomething(value) 
} 
get isLoaded() { 
    return this._isLoaded; 
} 
+0

ゲッターとセッターが、このシナリオではうまくいかない。アプリケーションはサーバからの応答の後にDOMを操作できるようにisLoaded値を監視する必要があります –

+0

なぜsetterがisLoaded値を待っていないと思いますか? –

+1

私はゲッターとセッターを今のところ使用しなければなりません。しかし、onChangesについてさらに詳しく読む予定です。 –

0

プロパティ@Input

@Input() 
isLoaded: boolean; 
関連する問題