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

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

每当我们使用下面的路由配置路由到这些模块时,每次都会创建StoreService.尽管StoreService是一个单件.如果我们延迟加载这些模块,问题会变得更糟,每次我们路由到该模块时都会创建StoreService.当创建一个新的函数时,不会同时调用OnDestroy.因此,如果我们注册到可观察对象/emits 器,则会为所有已停用的StoreService实例触发事件.

我们如何避免这种行为?

export const routes: Routes = [
  {
    path: '',
    loadChildren: () => DashboardModule,
    canActivate: [LoginAllRoutesGuard]
  },
  {
    path: 'asset',
    loadChildren: () => AssetModule,
    canActivate: [LoginAllRoutesGuard]
  },
  {
    path: 'map',
    loadChildren: () => MapModule,
    canActivate: [LoginAllRoutesGuard]
  },

推荐答案

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

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class StoreService {

}

真的,我不知道你们能不能提供单身汉

@Injectable({
  providedIn: 'AssetModule',
})

Angular相关问答推荐

单元测试 case 模拟store 中的行为主体

尾风手风琴中的Ngor

Swiper 11角17 SSR Swiper断点不工作

选中/取消选中-复选框未正确返回TRUE或FALSE

将ngModel绑定到@Input属性是不是一种糟糕的做法?

Angular NG5002错误无效的ICU消息和意外字符EOF

Angular 不使用NgRx的简单CRUD应用程序

如何在 Angular 中顺序执行回调

VSCode / Angular 应用程序未完全启动

在 kubernetes 上创建 Ingress 服务以将 springboot [后端] 连接到前端 [angular]

您如何链接需要多个先前可观察对象的依赖订阅

Angular 2 中的 ChangeDetectionStrategy.OnPush 和 Observable.subscribe

Angular 7 测试:NullInjectorError:No provider for ActivatedRoute

请求 http.GET 时发送的 Angular2 OPTIONS 方法

Angular:ViewChild 上未定义 nativeElement

ngx-toastr,Toast 未在 Angular 7 中显示

如何处理Angular2中的查询参数

如何导航到同级路由?

升级到 angular-6.x 会给出Uncaught ReferenceError: global is not defined

Firebase 查询子项的子项是否包含值