Должен ли быть код в конструкторе @NgModule и если да, то каковы причины этого? - PullRequest
1 голос
/ 18 марта 2019

Это возможно, и код запускается при загрузке модуля:

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

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

Но если бы я хотел инициализировать код, я не должен использовать APP_INITIALIZER или какой-то другой хук?

Я не могу найти вескую причину для того, когда это хорошее использование и как оно будет полезно.

Вероятно, еще один хороший вопрос будет: Когда этот код будет выполнен во время жизни приложения Angular ?

1 Ответ

0 голосов
/ 18 марта 2019

Я использую этот способ внедрения в этом сценарии, когда я хочу использовать службу 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. Возможно, есть другие способы использования этой функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...