2016-08-05 59 views
1

我正在使用Ngrx和Angular2構建移動應用程序。我想在用戶從我的應用程序中註銷時清除商店?任何人都可以知道如何做到這一點?如何清除#ngrx中的狀態?

回答

-1

我對做這件事的方式的猜測是將一個組件註冊在其上。把它放在一個路由器插座或一個結構指令中,當值發生變化時可能會強制銷燬和初始化組件。由於商店被註冊爲組件的提供者(除非我誤認爲)並且應該綁定到組件,否則應該在組件被銷燬時銷燬,並使用新組件創建新組件。只是一個想法。我沒有時間去測試它。

不要在父組件中註冊提供者。我相信注射劑通過層次結構起作用。

+0

我不明白下投票。這是一個合理的潛在答案。如果不起作用,請將其添加到評論中。如果它不是你想要的答案類型,那麼你需要在你的問題中更具體。 – wiredprogrammer

5

你應該在你的每個reducer中有一個明確的動作,它將清除商店中的各個屬性。當您致電logout時,請在每個減速器中手動分配清除操作。如果現在有一個選項可以一次性清理整個商店,我現在還不確定。

替代: 更清潔和更快的方法將是。無論何時您通過store.dispatch致電訴訟,它都會調用您的所有縮減器並使用該action.type。假設您的動作類型名稱爲CLEAR,請將此動作放入您的每個減速器中以清除商店的相應屬性。並且在action.type = 'CLEAR'之前撥打store.dispatch,它將清除商店的所有屬性。

如果混淆讓我知道,我會嘗試用代碼解釋。

+0

是不是舊國家仍然保留(允許國家時間旅行的能力)?內存中是否還保留「清除」的對象? –

3

解決方法是編寫根減速器。

它類似於此:

export function reducer(state: any, action: any): ActionReducer<any> { 
    if (action.type === 'CLEAR STATE') { 
     state = undefined; 
    } 

    return appReducer(state, action); 
} 

檢查:How to reset the state of a Redux store?