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导入了其他模块,它生成了一个新实例。