Я пытаюсь инкапсулировать состояние ngrx в общий класс сервиса, чтобы абстрагировать детали реализации от моих компонентов.
Пример класса сервиса, который зарегистрирован в моем приложении .module.ts providers
@Injectable()
export class PatientService {
state: Observable<PatientState>;
constructor(
private store: Store<AppState>,
) {
this.state = store.select<PatientState>('patients');
}
}
Я проверил свои действия, редуктор и эффекты работают, как ожидалось, однако, когда я подписываюсь на состояние службы в компоненте, он возвращает undefined
.
Пример подписки компонента с использованием общей службы:
@Component({
...
})
export class DashboardComponent implements OnInit {
constructor(
private patientService: PatientService,
) {}
ngOnInit(): void {
// dispatches action to load patient from API
this.patientService.loadPatient();
this.patientService.state.subscribe(patientState => {
console.log('patientState', patientState);
// Does not work. Logs undefined.
});
}
}
Если я подписываюсь непосредственно в хранилище, он работает как ожидалось.
Пример:
@Component({
...
})
export class DashboardComponent implements OnInit {
constructor(
private patientActions: PatientActions,
private store: Store<AppState>,
) {}
ngOnInit(): void {
this.store.dispatch(this.patientActions.loadPatient());
this.store.select<PatientState>('patients').subscribe(patientState => {
console.log('patientState', patientState);
// Works as expected.
});
}
}
Что я делаю неправильно?