2016-08-15 165 views
2

我正在嘗試使用ngrx與RC5,但我得到了一些有線行爲。狀態更改可以被ngrx日誌監視器正確捕獲,但它們不會發送給我的訂戶。ngrx與Angular 2 RC5

但是,一旦我改變頁面(我正在使用@角度/路由器3),我的所有狀態變化都會逐個發送給訂閱者。

下面是代碼

ngOnInit() { 
     this._store.dispatch(this._mediaActions.load()); 
     this._positionListener = this._store 
     .let(getMediaFolderContent()) 
     .subscribe(a => this.position = a); 

     this._store.let(getMediaFolderContent()).subscribe(a => console.log(a)); 
     this._store.select(s => s.media).subscribe(a => console.log('just a test: ', a)); 
    } 

的樣品獲得最新的狀態,當我第一次瀏覽網頁,但沒有後續變化得到抓獲。然後,一旦我從頁面導航並返回到頁面,我會看到狀態更改。

我知道這是不夠代碼的一個有效的問題,但有這麼多,我不知道從哪裏開始複製所有。我只是在RC5中跳出了一個處理類似問題的人。

在遷移到RC5之前,所有代碼都能正常工作。

+0

當監視器中顯示狀態變化但未發出狀態變化時,我會檢查的第一件事是reducer返回一個新對象。自由使用object.assign。沒有新的對象,=沒有新的可觀察對象。可能不是這樣,但它是一個開始的地方。 – wiredprogrammer

回答

1

我已經設法解決它。我希望這可以幫助別人。

所以,問題是在我的減速器是我會做的是:

return Object.assign(state, {something: 'something'} 

但事實狀態的變化,如果我創建一個新的對象只時發出。所以我必須做的是改變這樣的分配:

return Object.assign({}, state, {something: 'something'} 

謝謝@wiredprogrammer指出我在正確的方向。

+0

你能說明如何在rc5中添加ngrx嗎? webstorm does not讓我添加provideStore –

+0

嗯..我也使用webstorm,我沒有得到任何錯誤或警告。確保provideStore(reducer)位於app.module.ts中providers數組的一側。 –

+0

我似乎無法得到一個plunkr的工作,但這是一個簡單的jsFiddle與我的app.module.ts。希望它有助於https://jsfiddle.net/czzofLL5/ –