複数の兄弟コンポーネント間でデータを共有するために、データ ストア サービスを実装しています。各コンポーネントは、データ ストアの変更について通知を受ける必要があります。データ ストアはそれ自体では設定されません。データはコントローラーから設定する必要があります。
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
目標: - コンポーネント内に個別のオブジェクトがあり、メソッドを呼び出して変更し、ストアに送信できます。