Observable.subscribe() работает только один раз (ngrx\angular2)
Я подписываюсь на свойство store в конструкторе компонента
constructor(private someService: SomeService){
someService.someObservable.subscribe((data: Some)=> {
this.some = data;
console.log('changed');
});
}
В службе конструктор выглядит следующим образом:
constructor(private store: Store<any>){
this.someObservable = <Observable<{}>>store.select('some');
}
Я продолжаю изменять состояние этого объекта, но журнал регистрируется только один раз.
Также странно, что я обращаюсь к свойству this.some
непосредственно в моем шаблоне (без async
pipe), и он отлично обновляется!
Кажется, что свойство this.some
обновляется, но next()
в подписке не работает.
Помогите кому-нибудь? спасибо!
Ответы
Ответ 1
Вы не должны вызывать службы в конструкторе и считаться плохой практикой. Используйте метод ngOnInit() для подписки на услугу. Этот метод будет вызываться автоматически при загрузке компонента.
Попробуйте это, это может решить вашу проблему.
import {Component, OnInit} from "@angular/core";
export class YourComponent implements OnInit{
ngOnInit():void {
//handle your subscription here
}
}
Ответ 2
В моем очень похожем случае проблема заключалась в том, что один из обработчиков подписки выдавал ошибку. Когда встречается ошибка, наблюдаемый поток прекращает выдавать новые значения.
Ответ 3
Удостоверьтесь, что вы возвращаете новый объект из редуктора, если вы обновляете свойство и возвращаете тот же объект, что он не будет инициировать событие обновления хранилища.
switch (action.type) {
case MAIN_MENU_TOGGLE : {
Ex возвращает Object.assign({}, appSettings, {isMainMenuExpand: flag})
}