RxJS Observables-多个订阅者引用了同一对象

时间:2018-06-19 14:48:31

标签: angular rxjs observable

我做了一个角度服务,可以在应用程序中的多个组件之间共享状态数据。为了共享,它具有一个可以订阅的BehaviorSubject

export class DesignerService {
  private selectedFieldBehavior: BehaviorSubject<FormField> = new BehaviorSubject(this.selectedField);

  getSelectedField(): Observable<FormField> {
    return this.selectedFieldBehavior.asObservable();
  }
}

多个组件通过getSelectedField()方法对此进行订阅。当我使用next()发送新对象(this.selectedFieldBehavior.next({object}))时,如果任何订阅该组件的组件都修改了属性,则所有订阅组件都会看到该修改而不会通知服务(例如发送参考而不是副本),从而允许各个订户修改彼此的数据

我过去在angular / redux上做过一些工作,我认为它们促进了单向数据流和不变性。减速器是修改状态的唯一方法,然后将更改向下传播到订阅的组件。我目前拥有的将允许子组件修改他们想要的任何东西。我对构建需要状态管理的大型角度应用程序没有丰富的经验。我是否误解了状态管理应该如何工作?

1 个答案:

答案 0 :(得分:0)

您可以稍作更改以返回克隆

getSelectedField(): Observable<FormField> {
  return this.selectedFieldBehavior.asObservable().map(obj=>Object.assign({},obj));
 }