Ser*_*huk 5 singleton dependency-injection localization transient angular
我正在尝试将 LOCALE_ID 注入我的自定义组件并在每个 ngOnChanges 事件上跟踪它,以防它已更改(以使用其他语言重新初始化组件)。
在 AppModule 中,我有 LOCALE_ID 提供程序返回当前语言代码('en'、'fr' 等):
{
provide: LOCALE_ID,
deps: [I18NextService],
useFactory: (i18next: I18NextService) => {
return i18next.language; //string: 'en', 'ru'...
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下 OpaqueToken LOCALE_ID 注册为值“en-US”。
{
provide: LOCALE_ID,
useValue: 'en-US'
}
Run Code Online (Sandbox Code Playgroud)
然后我用构造函数注入器实现我的组件
constructor(private injector: Injector) {
}
Run Code Online (Sandbox Code Playgroud)
然后我解析 LOCALE_ID 依赖项以获取当前语言环境。
ngOnChanges(changes: SimpleChanges) {
let localeId = this.injector.get(LOCALE_ID);
...
}
Run Code Online (Sandbox Code Playgroud)
问题是 LOCALE_ID 提供程序注册为单例,我总是得到第一个解析值......
要求:
我不希望自定义组件了解我的 I18NextService
我不想更改 LOCALE_ID 解析后返回的类型。这可能会破坏其他希望 LOCALE_ID 为字符串的库\控件。这就是为什么我无法将 LOCALE_ID 解析为工厂函数的原因。
如果我可以只注册瞬态解析器就没有问题,但是 angular 2 DI 似乎没有这个功能(Aurelia 有)
欢迎提出建议!
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |