2016-06-28 13 views
3

我正在使用ngrx/store,ngrx/effectsngrx/router當頁面更改時,可以觸發加載所有存儲狀態的內容是什麼?

我的影響是這樣的:

@Effect() loadOneProduct$ = this.updates$ 
    .whenAction(LOAD_ONE_PRODUCT) 
    .switchMap(() => this.productService.loadOneProduct()) 
    .map(oneProduct => ({ type: LOAD_ONE_PRODUCT_SUCCESS, payload: oneProduct })); 

@Effect() loadOneWorker$ = this.updates$ 
    .whenAction(LOAD_ONE_WORKER) 
    .switchMap(() => this.workerService.loadOneWorker()) 
    .map(oneWorker => ({ type: LOAD_ONE_WORKER_SUCCESS, payload: oneWorker })); 

在開始的時候,店裏的狀態是這樣的:

{ 
    company: { name: 'Google' }, 
    products: {}, 
    workers: {} 
} 

1)運行this.store.dispatch({ type: LOAD_ONE_PRODUCT });後,就變成這樣:

{ 
    company: { name: 'Google' }, 
    products: { 
    oneProduct: { 
     label: 'Phone' 
    } 
    }, 
    workers: {} 
} 

2)運行後this.store.dispatch({ type: LOAD_ONE_WORKER });,變成這樣:

{ 
    company: { name: 'Google' }, 
    products: { 
    oneProduct: { 
     label: 'Phone' 
    } 
    }, 
    workers: { 
    oneWorker: { 
     name: 'Tom' 
    } 
    }, 
} 

3)接下來,當我去到另一個網頁,

{{store|async|json}} 

ngOnInit() 
{ 
    this.subscription = this.store 
     .select(x => x.products && x.products.oneProduct) 
     .subscribe(oneProduct => { 
     // Got undefined here. I suppose I can get the latest value from the store 
     console.log(oneProduct); 
     }); 

    // Everything will become correct if I `dispatch` any action 
    // And I created a action called TEST, no reducer for it, which means won't change store state, also works 
} 

現在{{store|async|json}}顯示:

{ 
    company: { name: 'Google' }, 
    products: {}, 
    workers: {} 
} 

所有我的狀態返回到初始狀態。不僅products消失,而且workers消失。 (注:workers也消失)

(但是,在Chrome Extention終極版工具,狀態樹顯示正確的所有的時間)

如果我添加一個按鈕,手動使用ChangeDetectorRef,做this._cdRef.detectChanges();{{store|async|json}}仍顯示初始狀態。 (所以似乎沒有區域相關)

但是,如果我派遣一些行動之後,productsworkers都會回到狀態。並且{{store|async|json}}也正確顯示。

由於在Chrome Extention Redux Tools中,狀態樹一直顯示正確。所以我想它只是不正確加載。我的問題是當頁面發生變化時,什麼會觸發加載所有存儲狀態?由於

+0

熱/冷觀察到的?當你訂閱你獲得初始值? –

+0

@DerekKite是的,我得到了初始值,這是'undefined'。其實我的整個商店狀態在那個時候都處於初始狀態。 –

+0

效果函數不會改變可觀察的loadOneProduct $而不是狀態嗎?在示例應用程序中,最後的地圖調用將分派到LOAD_ONE_WORKER_SUCCESS,然後在reducer中更新狀態。也許國家沒有被修改。順便說一句,我真的不知道,我正在搞清楚這些東西。 –

回答

相關問題