3 回答
TA贡献1859条经验 获得超6个赞
OnChanges 仅当输入属性的实例更改时,生命周期挂钩才会触发。
如果你想检查是否输入数组中的元素已经被添加,移动或删除,则可以使用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!');
}
}
如果需要检测数组中对象的更改,则需要遍历所有元素,并对每个元素应用KeyValueDiffers。(您可以与先前的检查同时进行)。
TA贡献1816条经验 获得超6个赞
您始终可以通过将其与空数组合并来创建对该数组的新引用:
this.yourArray = [{...}, {...}, {...}];
this.yourArray[0].yourModifiedField = "whatever";
this.yourArray = [].concat(this.yourArray);
上面的代码将更改数组引用,并将触发子组件中的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);
}
}
添加回答
举报