我有一个应用程序与2个主要模块,网络和管理.

管理员宣布

  providers: [
    {
      provide: DISPLAY_LIFE_TOKEN,
      useValue: 6000,
    },
  ],

而WEB宣称同样的标志是useValue: 10000.

这两个模块都包含使用providedIn: 'root',的服务的路由和组件,该服务导入令牌DISPLAY_LIFE_TOKEN.

然而,在该服务中,即使来自管理模块的调用,配置值也始终为10000.

请参见demo.

我是不是误解了注入令牌和提供程序的某些方面,或者有没有其他更好的方法来设置模块范围的配置?

推荐答案

服务在Angular 上是单一的.

解决这个问题的唯一办法是lazy loading美元.这确保为LAZY模块中提供的服务创建一个单独的实例.

从服务中删除providedIn: 'root',. 将服务添加到两个模块providersarray.

  providers: [
    MessageService,
    {
      provide: DISPLAY_LIFE_TOKEN,
      useValue: 6000,
    },
  ],

并更新路由模块以使用延迟加载:

   {
      path: 'admin',
      loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule),
    },
    {
      path: 'web',
      loadChildren: () => import('./web/web.module').then(m => m.WebModule),
    }]

(因为这会将路径从管理模块移动到应用程序模块,所以不要忘记还要更新管理模块中的路由).

Demo

Angular相关问答推荐

日语字符不受角形约束控制

Angular路由不响应子路由的子路由

在Angular中将路由解析器提供程序和组件提供程序相结合

使用当前选定的选项创建IF语句

如何重新显示ngbAlert(Bootstrap widgest for Angular)消息后再次驳回它

NG-Zorro Datepicker 手动输入掩码不起作用

Angular 16:信号更新未能更新视图

MAT折叠面板的动态开启和关闭无法工作

如何根据响应变化更改 Angular Carousel 的cellsToShow

没有调用订阅的原因是什么?

多个 Mat Paginator 在 Angular 组件中不起作用

Observable.forkJoin 和数组参数

由于时区,Angular 4 日期管道显示错误的日期 - 如何解决这个问题?

使用 Jasmine 和 Karma 对 Angular 进行单元测试,错误:无法绑定到xxx,因为它不是xxxxxx的已知属性.

默认情况下如何在Angular中 Select mat-button-toggle

Angular 2表单验证重复密码

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

在angular-cli中创建模块时生成路由模块

Angular ngClass 和单击事件以切换类

Angular 4 - 获取输入值