首页 > 解决方案 > @NgModule 的构造函数中是否应该有代码,如果有,有什么原因?

问题描述

可以这样做,并且在加载模块时运行代码:

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

@NgModule({...})
export class SomeNgModule {
  constructor(providedService: ProvidedService) {
        providerService.iCanDoThis('?');
  }
}

但是如果我想初始化代码,我应该不使用APP_INITIALIZER或其他一些钩子吗?

我找不到一个很好的理由来说明什么时候这是一个很好的用途以及它会有什么帮助。

可能另一个好问题是:这段代码何时会在 Angular 的应用程序生命周期中执行

标签: angulardesign-patternsng-modules

解决方案


我在这种情况下使用这种注入方式,我想在我的自定义类中使用 Angular 服务,但我不能直接在构造函数中注入它。因此我需要一个Injector.

import {Injector, NgModule} from '@angular/core';

export let InjectorInstance: Injector;


@NgModule({
  /* *** */
})
export class FeatureModule {
  constructor(private injector: Injector) {
    InjectorInstance = this.injector;
  }
}

然后在我的自定义类中使用它来注入 Angular 服务,如下所示:

import {InjectorInstance} from 'pat-to-feature-module';


export class MyCustomClass{

  getHttpService = () => {
    return InjectorInstance.get<HttpClient>(HttpClient);
  };
}

这样,我确保我使用(注入)由 Angular 创建的服务。也许还有其他方法可以使用此功能。


推荐阅读