Передайте данные конфигурации в зависимость угловой библиотеки, используя «forRoot» - PullRequest
0 голосов
/ 19 декабря 2018

Я создал две библиотеки Angular, одна имеет зависимость как другую.

зависимость должна быть настроена с использованием метода forRoot.Как я могу передать данные конфигурации из родительской библиотеки в ее зависимость?

Например, скажем, у нас есть TopLevelLib, который имеет OtherLib в качестве зависимости.OtherLib необходимо передать объект конфигурации с помощью forRoot.

AppModule конечного пользователя, импорт в

@NgModule({
  imports: [
    TopLevelLib.forRoot(someConfigData)
  ],
  declarations: [...],
  exports: [...]
})
export class AppModule { }

TopLevelLib - импортированный в AppModule конечным пользователем

@NgModule({
  imports: [
    ...
    OtherLib.forRoot(*****what goes in here?*****)
  ],
  declarations: [...],
  exports: [...]
})
export class TopLevelLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: SomeInjectionToken, useValue: config }]
    };
  }
}

OtherLib - импортируется TopLevelLib

@NgModule({
  imports: [...],
  declarations: [...],
  exports: [...]
})
export class OtherLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: SomeInjectionToken, useValue: config }]
    };
  }
}

Мне нужно передать экземпляр объекта конфигурации из TopLevelLib в OtherLib.Таким образом, когда конечный пользователь настраивает TopLevelLib с использованием forRoot, OtherLib будет настроен с теми же данными.

Есть идеи, как это реализовать?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

В конце концов, я нашел хорошее решение.Я раскрыл токен инъекции, используемый службой (в приведенном выше примере, OtherLib), импортировал его в модуль TopLevelLib и предоставил его экземпляру модуля с помощью конфигурации forRoot.

0 голосов
/ 19 декабря 2018

Вы можете ввести свои параметры forRoot.Вы явно определили, что OtherLib имеет config: ConfigObj в качестве параметра - это означает, что TopLevelLib необходимо настроить его для экземпляра ConfigObj.Таким образом, ответ на комментарий *****what goes in here?***** выглядит следующим образом: экземпляр ConfigObj.

Edit : после комментариев вы, похоже, хотите передать какое-то значение конфигурации.Вы можете сделать это следующим образом:

export class TopLevelLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: ConfigObj, useValue: config }]
    };
  }
}

Тогда OtherLib может использовать Инжектор, чтобы получить это:

class OtherLib {
  constructor(@Inject() ConfigObj) {}
...
...