第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

角度2:如何檢測陣列中的變化?(@input屬性)

角度2:如何檢測陣列中的變化?(@input屬性)

慕田峪7331174 2019-10-21 12:35:38
我有一個使用ajax請求檢索對象數(shù)組的父組件。此組件有兩個子組件:一個子組件以樹結(jié)構(gòu)顯示對象,另一個子組件以表格格式呈現(xiàn)其內(nèi)容。父級通過@input屬性將數(shù)組傳遞給其子級,它們會正確顯示內(nèi)容。一切都如預(yù)期。當(dāng)您更改對象中的某些字段時,會發(fā)生問題:子組件不會收到這些更改的通知。僅當(dāng)您手動將數(shù)組重新分配給其變量時,才會觸發(fā)更改。我習(xí)慣了使用Knockout JS,并且需要獲得類似于observableArrays的效果。我已經(jīng)閱讀了有關(guān)DoCheck的內(nèi)容,但不確定如何運行。
查看完整描述

3 回答

?
BIG陽

TA貢獻1859條經(jīng)驗 獲得超6個贊

OnChanges 僅當(dāng)輸入屬性的實例更改時,生命周期掛鉤才會觸發(fā)。


如果你想檢查是否輸入數(shù)組中的元素已經(jīng)被添加,移動或刪除,則可以使用IterableDiffers里面DoCheck的生命周期掛鉤,如下所示:


constructor(private _iterableDiffers: IterableDiffers) {

    this.iterableDiffer = this._iterableDiffers.find([]).create(null);

}


ngDoCheck() {

    let changes = this.iterableDiffer.diff(this.inputArray);

    if (changes) {

        console.log('Changes detected!');

    }

}

如果需要檢測數(shù)組中對象的更改,則需要遍歷所有元素,并對每個元素應(yīng)用KeyValueDiffers。(您可以與先前的檢查同時進行)。


查看完整回答
反對 回復(fù) 2019-10-21
?
瀟湘沐

TA貢獻1816條經(jīng)驗 獲得超6個贊

您始終可以通過將其與空數(shù)組合并來創(chuàng)建對該數(shù)組的新引用:


this.yourArray = [{...}, {...}, {...}];

this.yourArray[0].yourModifiedField = "whatever";


this.yourArray = [].concat(this.yourArray);

上面的代碼將更改數(shù)組引用,并將觸發(fā)子組件中的OnChanges機制。


查看完整回答
反對 回復(fù) 2019-10-21
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

您可以使用IterableDiffers


由* ngFor使用


constructor(private _differs: IterableDiffers) {}


ngOnChanges(changes: SimpleChanges): void {

  if (!this._differ && value) {

     this._differ = this._differs.find(value).create(this.ngForTrackBy);

  }

}


ngDoCheck(): void {

  if (this._differ) {

    const changes = this._differ.diff(this.ngForOf);

    if (changes) this._applyChanges(changes);

  }

}


查看完整回答
反對 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 600 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號