我制作了一个 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/