3 回答

TA貢獻1859條經驗 獲得超6個贊
OnChanges 僅當輸入屬性的實例更改時,生命周期掛鉤才會觸發(fā)。
如果你想檢查是否輸入數(shù)組中的元素已經被添加,移動或刪除,則可以使用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ù)組中對象的更改,則需要遍歷所有元素,并對每個元素應用KeyValueDiffers。(您可以與先前的檢查同時進行)。

TA貢獻1816條經驗 獲得超6個贊
您始終可以通過將其與空數(shù)組合并來創(chuàng)建對該數(shù)組的新引用:
this.yourArray = [{...}, {...}, {...}];
this.yourArray[0].yourModifiedField = "whatever";
this.yourArray = [].concat(this.yourArray);
上面的代碼將更改數(shù)組引用,并將觸發(fā)子組件中的OnChanges機制。

TA貢獻1865條經驗 獲得超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);
}
}
添加回答
舉報