2016-09-28 55 views
4

我在這個問題上看到過類似的問題,但沒有答案爲我工作。我有一個布爾值,每當一個異步任務完成時就會改變,但奇怪的是,任何時候ngonchages都不會觸發它的更改。下面是我的代碼:爲什麼ngOnchanges在angularjs中更改布爾值時不會觸發2

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'應該有上圖'bindings' /'@ input'屬性.. –

回答

2

ngOnChanges是Angulars變化檢測機構的生命週期回調,它被稱爲時一個@Input()由Angulars數據綁定

當你有改變

@Input() isLoaded: boolean; 

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

someValue在父組件被改變,則改變檢測更新isLoaded並調用ngOnChanges()

對於您的情況下,最簡單的解決方案可能是使用的,而不是一個屬性爲getter:

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

我知道getter和setter,但這不適用於這種情況。該應用程序需要監視isLoaded值,以便在來自服務器的響應之後可以操縱DOM –

+0

爲什麼您認爲setter未等待isLoaded值? –

+1

現在我必須使用getter和setter。但我仍然會閱讀更多關於onChanges的內容。 –

0

房產當作輸入(的檢查變化的部分)應標有@input

@Input() 
isLoaded: boolean; 
相關問題