例如,我有兩個輸入屬性:Angular2 Oninit()如何指定要監視的數據綁定屬性?
@Input() field1;
@Input() field2;
每次初始化FIELD1,我想功能1()被調用;每次我initialzie field2,我想調用function2()。我想這與OnInit類似,但並不完全。有什麼方法可以解決這個問題嗎?
謝謝!
例如,我有兩個輸入屬性:Angular2 Oninit()如何指定要監視的數據綁定屬性?
@Input() field1;
@Input() field2;
每次初始化FIELD1,我想功能1()被調用;每次我initialzie field2,我想調用function2()。我想這與OnInit類似,但並不完全。有什麼方法可以解決這個問題嗎?
謝謝!
第一次輸入屬性被綁定(以及其後的每個時間都在那裏),根據lifecycle documentation調用ngOnChanges
鉤子。
您可以可以將每個屬性綁定到SimpleChange
對象公開新和以前的狀態:
ngOnChanges(changes: {[propertyName: string]: SimpleChange}) {
for (let propName in changes) {
if (propName === 'field1')
this.function1();
if (propName === 'field2')
this.function2();
}
}
這取決於
如果「初始化」總是意味着分配一個新值,然後參見@DavidL的答案。
請注意,如果輸入屬性類型是JavaScript引用類型(數組,對象等),那麼「分配新值」意味着分配新的數組,對象等。它不包括修改數組項或對象屬性。請閱讀該場景......
如果輸入屬性類型是JavaScript引用類型,「initialize」可能意味着更改Array項目的值或更改Object屬性的值,則不能使用ngOnChanges
,因爲參考在這種情況下不會改變,因此角度更改檢測不會將此視爲更改。對於這種情況,請實施ngDoCheck並在該方法內編寫您自己的更改檢測邏輯。
你應該更經常回答馬克。在angular2上缺乏很好的答案。 –
@EricMartinez,我把這個東西稱爲一個不斷受阻的工作。 (我不抱怨,我喜歡我的工作。) –
哦,男人,工作是邪惡的,他們甚至讓你覺得你喜歡他們!我希望能在這裏更多地見到你! –