代码之家  ›  专栏  ›  技术社区  ›  Patola

Angular singlton服务已创建多次

  •  0
  • Patola  · 技术社区  · 2 年前

    我的应用程序有几个模块。请参见下文。StoreService由AssetModule提供,AssetModule由其他两个服务导入。

    • 资产模块
      • StoreService(可注入,由模块提供)
    • 仪表板模块
      • AssetModule和StoreService参考
    • MapModule
      • AssetModule和StoreService参考

    每当我们使用下面的路由配置路由到这些模块时,每次都会创建StoreService。即使StoreService是一个单例。如果我们延迟加载这些模块,问题会变得更糟,每次我们路由到该模块时都会创建StoreService。当创建一个新的时,也不会调用OnDestroy。因此,如果我们注册到observables/emiters,则会为StoreService的所有停用实例触发事件。

    我们如何避免这种行为?

    export const routes: Routes = [
      {
        path: '',
        loadChildren: () => DashboardModule,
        canActivate: [LoginAllRoutesGuard]
      },
      {
        path: 'asset',
        loadChildren: () => AssetModule,
        canActivate: [LoginAllRoutesGuard]
      },
      {
        path: 'map',
        loadChildren: () => MapModule,
        canActivate: [LoginAllRoutesGuard]
      },
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   Eliseo    2 年前

    更简单的方法是在根目录中定义所提供的服务

    import { Injectable } from '@angular/core';
    
    @Injectable({
      providedIn: 'root',
    })
    export class StoreService {
    
    }
    

    真的,我不知道你能不能提供 AssetModule 使singleton

    @Injectable({
      providedIn: 'AssetModule',
    })
    
    推荐文章