Подтвердить что ты не робот

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() в подписке не работает.

Помогите кому-нибудь? спасибо!

4b9b3361

Ответ 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}) }