EventEmitter 中的元素数量没有改变
Number of elements is not changed in EventEmitter
组件 Grid
如下所示:
export class GridComponent {
@Output('modelChanged') modelChangedEmitter = new EventEmitter();
private valueChanged(newValue: any, item: Object, prop: string) {
item[prop] = newValue;
this.emitChangedData();
}
private deleteItem() {
this.data = this.data.filter(function (e) {
return e !== this.toBeDeletedItem;
});
this.emitChangedData();
}
private emitChangedData() {
this.modelChangedEmitter.emit({
data: this.data
});
}
}
因此,当值被更改或删除时,EventEmitter
将数据的当前状态发送到容器组件。当一个值改变时,它被正确地发送到容器组件,所以它起作用了。但是,如果一个元素被过滤(并且在 Grid Component 中被有效过滤),发出的数据仍然有相同数量的项目。
这是容器组件初始化:
<grid [title]="'This is the grid title'" (modelChanged)="dataChanged(data)"></grid>
有什么问题吗?
使用() =>
代替function ()
private deleteItem() {
this.data = this.data.filter((e) => {
return e !== this.toBeDeletedItem;
});
this.emitChangedData();
}
以确保 this.
始终指向当前 class。
根据评论更新
<grid (modelChanged)="dataChanged($event)"></grid>
而不是
<grid (modelChanged)="dataChanged(data)"></grid>
组件 Grid
如下所示:
export class GridComponent {
@Output('modelChanged') modelChangedEmitter = new EventEmitter();
private valueChanged(newValue: any, item: Object, prop: string) {
item[prop] = newValue;
this.emitChangedData();
}
private deleteItem() {
this.data = this.data.filter(function (e) {
return e !== this.toBeDeletedItem;
});
this.emitChangedData();
}
private emitChangedData() {
this.modelChangedEmitter.emit({
data: this.data
});
}
}
因此,当值被更改或删除时,EventEmitter
将数据的当前状态发送到容器组件。当一个值改变时,它被正确地发送到容器组件,所以它起作用了。但是,如果一个元素被过滤(并且在 Grid Component 中被有效过滤),发出的数据仍然有相同数量的项目。
这是容器组件初始化:
<grid [title]="'This is the grid title'" (modelChanged)="dataChanged(data)"></grid>
有什么问题吗?
使用() =>
代替function ()
private deleteItem() {
this.data = this.data.filter((e) => {
return e !== this.toBeDeletedItem;
});
this.emitChangedData();
}
以确保 this.
始终指向当前 class。
根据评论更新
<grid (modelChanged)="dataChanged($event)"></grid>
而不是
<grid (modelChanged)="dataChanged(data)"></grid>