通过LazyLoading删除NgRx节点。

问题描述 投票:0回答:1

我正在使用Angular 9应用实现NgRx的懒惰加载。

当应用程序加载时,我的状态是这样的

enter image description here

当我导航到路由'account-config'时,状态发生了变化,因为我已经懒得加载模块,并在导入时实现了StoreModule.forFeature。然后,我的状态看起来像这样

enter image description here

我想知道,当我导航到其他路径时,是否有办法删除'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'
  }
];
angular lazy-loading ngrx ngrx-store angular-lazyloading
1个回答
1
投票

我想有一个办法,就是 Store 类有一个方法 removeReducer:

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

商店的每个片断都与一个减速器相关联,所以你可以通过删除它们的键来摆脱一些片断。

仓库中的 Store 课堂也有: addReducer:

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

所以我认为你可以使用 store.addReducer(key, reducer) 关于 ngOnInitstore.removeReducer(key) 关于 ngOnDestroy.

© www.soinside.com 2019 - 2024. All rights reserved.