angular - RxJS Observables - 多个订阅者获取对同一对象的引用

标签 angular rxjs observable

我制作了一个 Angular 服务来在我的应用程序中的多个组件之间共享状态数据。为了分享,它有一个可以订阅的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 做过一些工作,我认为它们促进了单向数据流和不变性。 Reducers 是修改状态的唯一方法,然后更改会向下传播到订阅组件。我目前拥有的将允许子组件修改他们想要的任何内容。我在构建需要状态管理的大型 Angular 应用程序方面不是很有经验。我是否误解了状态管理的运作方式?

最佳答案

你可以稍微改变你的方法来返回一个克隆

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

关于angular - RxJS Observables - 多个订阅者获取对同一对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50931266/

相关文章:

javascript - 取消订阅后再次激活observable

angular - 如何在 Angular RxJS 中响应式订阅 URL 更改并获取 URL?

javascript - 使用 RxJs Observables - 为什么数据更改时订阅者没有收到通知?

java - RxJava 中的 FlatMap 和订阅

angular - 'checked' 和 (ngModel) 有什么区别

在 IIS : HTTP Error 404 上托管的 Angular 2

javascript - vuejs 2观察不起作用

Angular 2 : Using service to share data between components

angular - PouchDB 关系型 pouch 和 pouchdb-find 与 Angular5/Typescript

Angular 2 - 从基类继承提供者