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

Angular RxJS Observables-多个订阅者获得对同一对象的引用,angular,rxjs,observable,Angular,Rxjs,Observable,我已经做了一个angular服务,在我的应用程序中跨多个组件共享状态数据。为了共享,它有一个可以订阅的行为主体 export class DesignerService { private selectedFieldBehavior: BehaviorSubject<FormField> = new BehaviorSubject(this.selectedField); getSelectedField(): Observable<FormField> {

我已经做了一个angular服务,在我的应用程序中跨多个组件共享状态数据。为了共享,它有一个可以订阅的行为主体

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

  getSelectedField(): Observable<FormField> {
    return this.selectedFieldBehavior.asObservable();
  }
}
导出类设计器服务{
private selectedFieldBehavior:BehaviorSubject=新的BehaviorSubject(this.selectedField);
getSelectedField():可观察{
返回此.selectedFieldBehavior.asObservable();
}
}
多个组件通过getSelectedField()方法订阅此项。当我使用
next()
发送一个新对象(this.selectedFieldBehavior.next({object}))时,如果订阅它的任何组件修改了一个属性,所有订阅组件都会看到该修改而不通知服务(就像它发送的是引用而不是副本),从而允许各个订阅者修改彼此的数据


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

您可以稍微更改一下方法以返回克隆

getSelectedField(): Observable<FormField> {
  return this.selectedFieldBehavior.asObservable().map(obj=>Object.assign({},obj));
 }
getSelectedField():可观察{
返回这个.selectedFieldBehavior.asObservable().map(obj=>Object.assign({},obj));
}

您是否尝试克隆该对象?按值复制?您将如何/在何处执行此操作?在服务中,或者在订阅的每个组件中?对问题进行了一些编辑,希望更容易理解我的问题,就像它发送的是一个引用而不是一个副本:嗯,这正是它所做的。对对象的引用在JavaScript中传递。这就是它的工作原理。我认为他们促进了[…]不变性:是的,您选择了不使用不可变对象,而是使用可变对象。发出一个不可变的对象,没有人能够对其进行变异。@JBNizet是否有一种方法/库可供推荐?小心,这会创建一个浅克隆。