2

我正在使用延迟加载实现 NgRx 的 Angular 9 应用程序

当应用程序加载时,我的状态看起来像这样

在此处输入图像描述

当我导航到“/account-config”路线时,状态会发生变化,因为我已经延迟加载了模块并实现了一个 StoreModule.forFeature int 他导入。然后,我的状态是这样的

在此处输入图像描述

我想知道当我导航到其他路线时是否有办法删除“accountconfig”节点,并在我返回“/account-config”时再次放置。

这些是我的路线:

const routes: Routes = [
  {
    path: '',
    component: AppLayoutComponent,
    canActivate: [ AuthGuard ],
    children: [
      { path: 'dashboard',  loadChildren: () => import('./pages/modules/dashboard/dashboard.module').then(m => m.DashboardModule) },
      { path: 'account-config',  loadChildren: () => import('./pages/modules/account-config/account-config.module').then(m => m.AccountConfigModule) },
    ]
  },
  {
    path: '',
    component: AuthLayoutComponent,
    children: [
      { path: 'session',  loadChildren: () => import('./pages/modules/session/session.module').then(m => m.SessionModule) }
    ]
  },
  {
    path: '**',
    redirectTo: 'session/not-found'
  }
];
4

1 回答 1

1

我认为有一种方法,Store该类有一个方法removeReducer

removeReducer<Key extends Extract<keyof T, string>>(key: Key) {
  this.reducerManager.removeReducer(key);
}

存储的每个切片都与一个 reducer 相关联,因此您可以通过删除它们的键来摆脱一些切片。

Store课程还具有addReducer

  addReducer<State, Actions extends Action = Action>(
    key: string,
    reducer: ActionReducer<State, Actions>
  ) {
    this.reducerManager.addReducer(key, reducer);
  }

所以我认为你可以使用store.addReducer(key, reducer)onngOnInitstore.removeReducer(key)on ngOnDestroy

于 2020-05-16T04:53:10.017 回答