0
我實施數據存儲服務來分享多個兄弟組件之間的數據。每個組件都需要得到有關數據存儲區更改的通知。數據存儲不會自行填充,數據需要從控制器設置。共享數據 - 的問題,由於對象引用
data.store.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
方法
也許如果他們打算修改每個用戶應該克隆的數據?這種情況讓我想起了一個父組件將一個對象引用傳遞給許多子組件。通常父母不會爲每個孩子克隆對象 - 孩子們會克隆對象以防止寫入原始對象。但我不確定這是否是正確的心態。 –
這正是我需要的!謝謝! –
突變在主題(狀態轉變)的對象只應通過推動新值到的sTREM(subject.next()),所以基本上要在該對象不變性發生。 –