angular - NgRx 共享存储在加载延迟加载模块时重置

标签 angular angular6 ngrx

我有各种商店模块导入到主商店模块,每个商店模块都向 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/

相关文章:

javascript - 一旦将 angular2 应用程序与 gulp 捆绑在一起,如何在 apache http 服务器上进行部署

angular - 将 HTML 片段附加到 Angular 6 中的 View

angular - 发送 :false 时测试@Effect

angular - 将初始状态对象初始化为空对象而不是未定义的

angular6 - 没有指令 "exportAs"设置为 "matAutocompleteOrigin"

rxjs - 仅从 Store 中选择最近的值

angular - 如何为新的 Angular 4 项目启用 tree-shaking

angular - 从 Angular 的第一个选项卡注销时,从第二个选项卡注销问题

angular - 在自定义指令中抽象出传单指令

angular - Angular 6 中的 Observable<string> 类型上不存在属性 'publish'