Angular 2:动态获取LOCALE_ID(根据请求解析)

时间:2017-01-24 05:34:51

标签: angular dependency-injection localization singleton transient

我尝试将LOCALE_ID注入我的自定义组件,并在每个ngOnChanges事件中跟踪它,以防它被更改(用其他语言重新启动组件)。

在AppModule中,我有LOCALE_ID提供程序,它返回当前语言代码(' en'' fr'等等):

{
 provide: LOCALE_ID,
 deps: [I18NextService],
 useFactory: (i18next: I18NextService) => {
  return i18next.language; //string: 'en', 'ru'...
 }
}

默认情况下,OpaqueToken LOCALE_ID注册为值" en-US"。

{
  provide: LOCALE_ID,
  useValue: 'en-US'
}

然后我使用构造函数注入器实现我的组件

constructor(private injector: Injector) {
}

然后我解决了LOCALE_ID依赖关系以获取当前的语言环境。

ngOnChanges(changes: SimpleChanges) {
  let localeId = this.injector.get(LOCALE_ID);
   ...
}

问题是LOCALE_ID提供者注册为singleton,我总是得到第一个解析的值......

要求:

  1. 我不希望自定义组件知道我的I18NextService

  2. 我不想更改LOCALE_ID解决后返回的类型。这可能会破坏其他期望LOCALE_ID为字符串的libs \控件。这就是我无法将LOCALE_ID解析为工厂功能的原因。

  3. 如果我只能注册瞬态解析器就没有问题,但是角度2 DI似乎没有这个功能(Aurelia确实如此)

    欢迎提出建议!

0 个答案:

没有答案