我做了一个角度服务,可以在应用程序中的多个组件之间共享状态数据。为了共享,它具有一个可以订阅的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上做过一些工作,我认为它们促进了单向数据流和不变性。减速器是修改状态的唯一方法,然后将更改向下传播到订阅的组件。我目前拥有的将允许子组件修改他们想要的任何东西。我对构建需要状态管理的大型角度应用程序没有丰富的经验。我是否误解了状态管理应该如何工作?
答案 0 :(得分:0)
您可以稍作更改以返回克隆
getSelectedField(): Observable<FormField> {
return this.selectedFieldBehavior.asObservable().map(obj=>Object.assign({},obj));
}