如果productId不同,如何避免覆盖事件?

时间:2016-06-13 04:57:04

标签: typescript angular rxjs rxjs5

我有一份产品清单。每个产品都有iddescription

<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的事件,而我只在一个地方订阅。

我该如何解决这个问题?感谢

1 个答案:

答案 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 });
}