2016-08-05 117 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?