Angular 加载延迟加载模块时,NgRx共享存储重置
我有各种存储模块导入到主存储模块,每个存储模块都在Angular 加载延迟加载模块时,NgRx共享存储重置,angular,angular6,ngrx,Angular,Angular6,Ngrx,我有各种存储模块导入到主存储模块,每个存储模块都在StoreModule.forFeature中注册自身。我也有各种功能模块。我试图延迟加载其中一个功能模块,但一旦加载,存储就会重置。我不想延迟加载任何存储模块。整个商店是共享的。NgRx devTools将丢失所有以前的操作,并且在创建延迟加载模块后,将重新运行@NgRx/store/init和@NgRx/effects/init。如何在加载惰性模块后保持整个存储完好无损 ---更新--- 文件结构 store - store.module.
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
@NgModule({
imports: [
AuthStoreModule,
CustomersStoreModule,
...
StoreModule.forRoot({}),
StoreRouterConnectingModule.forRoot({ stateKey: 'router' }),
EffectsModule.forRoot([])
]})
export class StoreModule {}
auth store.module.ts
@NgModule({
imports: [
CommonModule,
StoreModule.forFeature('auth', authReducer),
EffectsModule.forFeature([AuthEffects])
],
providers: [AuthEffects]
})
export class AuthStoreModule {}
const routes: Routes = [ ... ]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CustomersRoutingModule { }
@NgModule({
imports: [
.... ,
CustomersRoutingModule
]})
export class CustomersModule { }
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 { }
。。。与客户商店模块和其他商店模块相同
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
存储模块
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
@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
客户路由.module.ts
@NgModule({
imports: [
CommonModule,
StoreModule.forFeature('auth', authReducer),
EffectsModule.forFeature([AuthEffects])
],
providers: [AuthEffects]
})
export class AuthStoreModule {}
const routes: Routes = [ ... ]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CustomersRoutingModule { }
@NgModule({
imports: [
.... ,
CustomersRoutingModule
]})
export class CustomersModule { }
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 { }
客户.模块.ts
@NgModule({
imports: [
CommonModule,
StoreModule.forFeature('auth', authReducer),
EffectsModule.forFeature([AuthEffects])
],
providers: [AuthEffects]
})
export class AuthStoreModule {}
const routes: Routes = [ ... ]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CustomersRoutingModule { }
@NgModule({
imports: [
.... ,
CustomersRoutingModule
]})
export class CustomersModule { }
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 { }
路由器.module.ts
@NgModule({
imports: [
CommonModule,
StoreModule.forFeature('auth', authReducer),
EffectsModule.forFeature([AuthEffects])
],
providers: [AuthEffects]
})
export class AuthStoreModule {}
const routes: Routes = [ ... ]
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CustomersRoutingModule { }
@NgModule({
imports: [
.... ,
CustomersRoutingModule
]})
export class CustomersModule { }
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组件
模块)在延迟加载的客户组件和仪表板组件之间共享。当我导航到仪表板时,标题.component
加载位于AuthStore
中的用户信息。
当我导航到lazy-loaded-customers组件时,客户在customersStore
中被正确检索,auth-effects和reducer运行,但它们似乎在不同的范围内。因此,header.component
从不检索用户对象,但customers.component
正确检索customers集合。在redux devTools中,存储被清除,只显示源自延迟加载组件的操作。来自公共组件的操作从未显示(但代码仍在运行)。是否所有的还原程序都包含一个只返回状态的默认值
案例
如果不是的话,那么这可能是您的问题简化程序(如@timdeschryver在上文中所评论的,称为not returning state)的原因,听起来很可能是这个问题的原因 问题是我将SharedStoreModule导入了其他模块。这导致在加载延迟加载的模块后生成存储的新实例。我删除了对SharedStoredModule的所有引用,并将其仅保留在appModule级别,并按预期工作 我们需要在这里看到一些代码,以确保每个减速机都返回state@timdeschryver是的,还原程序按预期工作。问题是我将sharedStoreModule导入了其他模块,它生成了一个新实例。