【发布时间】:2016-12-12 03:26:36
【问题描述】:
我正在使用 Ngrx 和 Angular2 构建一个移动应用程序。当用户从我的应用程序中注销时,我想清除商店?有谁知道怎么做?
【问题讨论】:
标签: ngrx
我正在使用 Ngrx 和 Angular2 构建一个移动应用程序。当用户从我的应用程序中注销时,我想清除商店?有谁知道怎么做?
【问题讨论】:
标签: ngrx
您应该在每个 reducer 中都有一个明确的操作,这将清理商店中的相应属性。当您调用 logout 时,手动在每个减速器中分派清除操作。我现在不确定是否可以一次性清理整个商店。
替代方案:
一个更清洁和更快的方法将是。每当您通过store.dispatch 调用操作时,它都会使用action.type 调用所有reducer。假设你的动作类型名称是CLEAR,把这个动作放在你的每个reducer中以清除商店的相应属性。并调用store.dispatch 和action.type = 'CLEAR' ONCE 一次,它将清除商店的所有属性。
如果让我感到困惑,请告诉我,我会尝试用代码解释。
【讨论】:
解决办法是写root reducer。
类似这样:
export function reducer(state: any, action: any): ActionReducer<any> {
if (action.type === 'CLEAR STATE') {
state = undefined;
}
return appReducer(state, action);
}
【讨论】:
我对一种方法的猜测是拥有一个在其上注册了商店的组件。将它放在路由器出口或结构指令中,当值更改时,可能会在组件上强制销毁和初始化。
由于 store 被注册为组件的提供者(除非我弄错了)并且应该绑定到它,所以当组件被销毁并使用新组件创建新组件时,它应该被销毁。只是一个想法。我还没来得及测试。
但不要在父组件中注册提供程序。我相信注射剂是通过层次结构工作的。
【讨论】: