我正在实现一个数据存储服务来在多个兄弟组件之间共享数据。每个组件都需要收到有关数据存储更改的通知。数据存储不会自行填充,需要从控制器设置数据。
数据存储.ts
@Injectable()
export class DocumentIssueStore {
private _documentIssue: BehaviorSubject<DocumentIssueModel>;
constructor() {
this._documentIssue = new BehaviorSubject(null);
}
public setValue(newVal: DocumentIssueModel) {
this._documentIssue.next(cloneDeep(newVal));
}
public documentIssue(): Observable<DocumentIssueModel> {
return this._documentIssue.asObservable();
}
public current(): DocumentIssueModel {
return cloneDeep(this._documentIssue.getValue());
}
在这ngInit
两个组件的方法中,我订阅了数据存储:
// Subscribe to changes in the store
this.storeSubscription = this.documentIssueStore.documentIssue().subscribe(
(data: DocumentIssueModel) => {
this.documentIssue = data;
}
);
问题:this.documentIssue
任何组件的更改都会导致:
- 更改
this.documentIssue
订阅的所有其他组件中的实例 ( ) - 更改存储中的实例 (
this._documentIssue.getValue()
)
setValue
目标: - 在组件中拥有单独的对象,可以通过调用方法对其进行更改然后发送到商店