关于 Angular:实例化一个服务而不注入它

Instantiate a service without injecting it

我有一个名为 titleService 的服务,组件使用它来设置选项卡和标题中的页面标题。此服务作为依赖项,所以我不能硬注入它。

它的工作原理基本上类似于 Angular 原生 Title 服务,但有一些自定义内容。

现在,我在我的应用程序头组件中注入了这个组件,但是当我登录时我的应用程序头没有被使用(在私有路径之外)

我希望这个服务总是在应用程序中实例化,即使没有人使用它(因为即使他在登录时没有在组件中使用,他仍然将标签标题设置为默认值)

为了解决这个问题,我将它导入我的 app.module

1
2
3
4
5
  constructor(
    private store: Store<AppState>,
    private translateService: TranslateService,
    private _: TitleService
  ) {}

但是,由于我不使用该服务,我的typescript抱怨

Property '_' is declared but its value is never read.

有没有其他方法可以解决这个问题?


您可以使用 APP_INITIALIZER。它是一个 InjectionToken,可用于在应用启动时运行一些代码。也可以在这里注入一个服务,执行一个函数。

1
2
3
4
5
6
7
8
9
10
@NgModule({
  providers: [
    TitleService,
    {
      provide: APP_INITIALIZER,
      useFactory: (title: TitleService) => () => return title.setDefaultTitle(),
      deps: [TitleService],
      multi: true
    }]
})