我有一份产品清单。每个产品都有id
和description
。
<div *ngFor="let product of products">
<input type="text" [ngModel]="product.description" (ngModelChange)="onEdit($event, product.id)">
</div>
editStream: EventEmitter<any> = new EventEmitter();
ngOnInit() {
this.editStream
.debounceTime(1000)
.distinctUntilChanged()
.mergeMap(x => Observable.of(x))
.subscribe(x => {
// based on product id, update its description in the database
});
}
private onEdit(description: string, id: string) {
this.editStream.emit({ description, id });
}
当我编辑一个产品的描述时,它很有效。
但是,如果我修改了product1
的说明,请立即修改product2
的说明(时间间隔小于1秒),只有product2
& #39;的描述将会更新。
我想这是因为product2
的事件会覆盖product1
的事件,而我只在一个地方订阅。
我该如何解决这个问题?感谢
答案 0 :(得分:2)
如果您想使用distinctUntilChanged()
,则每个Observable
需要不同的product
。
this.products.forEach(p => this.editStreams.push(new EventEmitter())
<div *ngFor="let product of products let i=index">
<input type="text" [ngModel]="product.description" (ngModelChange)="onEdit($event, i, product.id)">
</div>
private onEdit(description: string, id: string) {
this.editStreams[i].emit({ description, id });
}