我有各种商店模块导入到主商店模块,每个商店模块都向 StoreModule.forFeature
注册自己。 .我也有各种功能模块。我正在尝试延迟加载这些功能模块之一,但是一旦加载,商店就会重置。我不想延迟加载任何商店模块。全店共享。 NgRx devTools 丢失所有之前的操作和 @ngrx/store/init
和 @ngrx/effects/init
创建延迟加载的模块后重新运行。任何想法如何在加载惰性模块后保持整个商店的完整性?
--- 更新 ---
文件结构
store
- store.module.ts
- auth-store
- actions.ts
- effects.ts
- reducer.ts
- selectors.ts
- state.ts
- auth-store.module.ts
- customers-store
- ...
- customers-store.module.ts
auth-store.module.ts
@NgModule({
imports: [
CommonModule,
StoreModule.forFeature('auth', authReducer),
EffectsModule.forFeature([AuthEffects])
],
providers: [AuthEffects]
})
export class AuthStoreModule {}
... 同样适用于
customers-store.module
和其他商店模块store.module
@NgModule({
imports: [
AuthStoreModule,
CustomersStoreModule,
...
StoreModule.forRoot({}),
StoreRouterConnectingModule.forRoot({ stateKey: 'router' }),
EffectsModule.forRoot([])
]})
export class StoreModule {}
功能模块的文件结构
app
ui-components
....
- header.component.ts
- ui-components.module.ts
dashboard
....
- dashboard.module.ts
customers (lazy loaded)
....
- customers-routing.module.ts
- customers.module.ts
router
....
- router.module.ts
客户-routing.module.ts
const routes: Routes = [ ... ]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CustomersRoutingModule { }
customer.module.ts
@NgModule({
imports: [
.... ,
CustomersRoutingModule
]})
export class CustomersModule { }
router.module.ts
const routes: Routes = [
{
path: '',
loadChildren: '../customers/customers.module#CustomersModule'
},
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full'
},
....
]
@NgModule({
imports: [
StoreModule,
RouterModule.forRoot(routes, {
useHash: false
})
],
exports: [
RouterModule
]
})
export class AppRouterModule { }
header.component.ts
(以及整个 ui-components
模块)在延迟加载的客户组件和仪表板组件之间共享。当我导航到仪表板时 header.component
加载位于 AuthStore
中的用户信息.当我导航到延迟加载的客户组件时,在
customersStore
中正确检索了客户。 , auth 效果和 reducer 运行,但它们似乎在不同的范围内。因此header.component
从不检索用户对象,但检索 customers.component
正确检索客户集合。在 redux devTools 中,store 被清除,只显示源自延迟加载组件的操作。公共(public)组件的操作永远不会显示(但代码仍然运行)。
最佳答案
问题是我将 SharedStoreModule 导入到其他模块。这导致在加载延迟加载模块后生成存储的新实例。我删除了对 SharedStoredModule 的所有引用,并将其仅保留在 appModule 级别并按预期工作。
关于angular - NgRx 共享存储在加载延迟加载模块时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218275/