Токен впрыска не предоставляется в функциональных модулях - PullRequest
0 голосов
/ 29 апреля 2018

Я создал токен инъекции для своей конфигурации остальных конечных точек и предоставляю несколько значений для него во время выполнения. Если токен предоставлен в appmodule и используется в глобальных сервисах, он работает, но если я попытался предоставить другие данные в функциональный модуль и внедрить их в файл пространственных эффектов, я получаю staticinjectorerror, поставщик недоступен. вот код Injection-token code

1 Ответ

0 голосов
/ 01 июня 2018

Токены, предоставляемые лениво загруженными модулями, недоступны в глобальном масштабе; то есть они доступны только в том же модуле, в котором они предоставляются.

Чтобы обойти это, вы можете внедрить static forRoot(): ModuleWithProviders в свой функциональный модуль и импортировать его в свой корневой модуль. Это в основном позволяет вашему функциональному модулю предоставлять некоторые токены в корне, которые будут доступны глобально, а остальная часть модуля будет загружаться лениво.

Вот пример лениво загруженного функционального модуля, который предоставляет InjectionToken для глобальной области видимости:

@NgModule({
  ...
})
export class LazyLoadedFeatureModule {

  /**
   * Provide tokens to the global scope
   */
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: LazyLoadedFeatureModule,
      providers: [
        { provide: MY_INJECTION_TOKEN, useValue: MyInjectionValue, multi: true },
      ]
    }
  }

}

И вот он импортируется в корневой модуль:

@NgModule({
  ...
  imports: [
    LazyLoadedFeatureModule.forRoot(),
  ],
  ...
})
export class AppModule { }

Надеюсь, это поможет.

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