Откровенно говоря, ваш код должен работать нормально, но вот как я с этим справляюсь, если я что-то пропустил в вашем коде.
GlobalDataStore также должен выдавать BehaviourSubject как Observable, чтобы вы могли подписаться
Также сделайте поведение пользователя закрытым.
export class GlobalDataService {
private reserveSource = new BehaviorSubject<any[]>([]);
get reserveSource() {
return this.reserveSource.asObservable();
}
}
Затем просто подпишитесь на него в компоненте.
В качестве бонуса я также реализую эти функции в своих магазинах(так как я также использую BehaviourSubject)
//Gets the last value, that was pushed to the BehaviourSubject
get reserveSourceLastValue() {
return this.reserveSource.getValue();
}
//Deep clones the last value, if I want a precise copy for form editing buffer
get reserveSourceForEdit() {
return __lodash.cloneDeep( this.reserveSource.getValue() );
}
PRO PROFORMANCE TIP!
В качестве последнего примечания, если вы не отмените подписку на наблюдаемые, то они остаютсяоткрыть навсегда, даже после уничтожения самого компонента.Что еще хуже, поскольку у вас есть наблюдаемая, инициализированная в ngOnInit, то каждый раз, когда вы направляетесь в и из этого компонента, создается новая подписка.
Пожалуйста, прочитайте эту статью о том, как изящно отписаться от подписок в компонентах.
Angular / RxJs Когда мне следует отписаться от `Subscription`