Angular : 从 BehaviorSubject<any[]>([]) 中删除项目

Angular : remove item from BehaviorSubject<any[]>([])

这是我的 Angular5 应用程序中的一个小数据服务。 我正在尝试 add/remove 数组中的项目(实际上是一个 BehaviorSubject)。

data.service.ts

private roomArr_source = new BehaviorSubject<any[]>([]);
current_roomArr = this.roomArr_source.asObservable();

addRoomArr(data: any) {
    this.roomArr_source.next(this.roomArr_source.getValue().concat([data]));
}

removeRoomArr(data: any) {
    this.roomArr_source.forEach((item, index) => {
        if(item === data) { this.roomArr_source.splice(index, 1); }
    });
}

addRoomArr 函数有效,但 removeRommArr 无效。 错误是:

error TS2345: Argument of type '(item: any, index: any) => void' is not assignable to parameter of type '(value: any[]) => void'.
error TS2339: Property 'splice' does not exist on type 'BehaviorSubject<any[]>'.

我必须以某种方式将我的 BehaviorSubject 转换为一个数组,以便我可以使用 .forEach()。 我怎样才能做到这一点?

谢谢

如果你使用的是BehaviourSubject那么你可以访问getValue(),所以你想拼接当前值然后更新主题。

removeRoomArr(data: any) {
  const roomArr: any[] = this.roomArr_source.getValue();

  roomArr.forEach((item, index) => {
    if (item === data) { roomArr.splice(index, 1); }
  });

  this.roomArr_source.next(roomArr);
}