13

我正在订阅组件构造函数中的存储属性

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管道),并且它完美更新!似乎该this.some属性正在更新,但next()订阅中的 不起作用。

帮助任何人?谢谢!

4

4 回答 4

5

在我非常相似的情况下,问题是订阅处理程序之一引发了错误。当遇到错误时,可观察流停止发出新值。

于 2017-06-23T07:15:40.360 回答
0

我遇到了同样的问题,我发现原因是您编辑了状态,而不是为状态创建了新对象,例如:

做:Object.assign({}, state, {smt: changed}) }

而不是: Object.assign(state, {smt: changed}) }

于 2018-05-28T07:57:40.423 回答
0

您不应该在构造函数中调用服务,这被认为是一种不好的做法。使用 ngOnInit() 方法订阅服务。该方法会在组件加载时自动调用。

试试这样,这可能会解决你的问题。

import {Component, OnInit} from "@angular/core";

export class YourComponent implements OnInit{

    ngOnInit():void {
       //handle your subscription here
    }

}
于 2016-06-03T04:22:50.580 回答
0

如果更新属性并返回不会触发存储更新事件的相同对象,请确保从减速器返回新对象

开关(动作类型){

    case MAIN_MENU_TOGGLE : {

Ex return Object.assign({},appSettings, {isMainMenuExpand: flag}) }

于 2017-02-13T06:20:11.533 回答