Observable.subscribe()只能工作一次(ngrx \ angular2)

时间:2016-06-02 19:39:13

标签: angular rxjs angular2-services ngrx

我订阅了组件构造函数中的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管道),并且它完全更新! 似乎this.some属性正在更新,但订阅中的next()无效。

帮助任何人?谢谢!

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您不应该在构造函数中调用服务,并且将其视为不良做法。使用ngOnInit()方法订阅服务。在加载组件时将自动调用此方法。

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

this._scope.appRoot.pushPage(pageName, params);

答案 2 :(得分:0)

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

switch(action.type){

    case MAIN_MENU_TOGGLE : {

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

答案 3 :(得分:0)

我有同样的问题,我发现原因是你编辑了状态,没有为状态创建新对象,例如:

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

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