将 Angular 服务注入导出函数?
Inject an Angular service into an exported function?
我的 AppComponent 中定义了以下导出函数(class):
export function multiTranslateHttpLoaderFactory(http: HttpClient) {
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
然后以这种方式在 AppModule 的导入数组中使用:
TranslateModule.forRoot ({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient]
}
}),
我需要一种在导出函数中使用我的 AuthService 的方法,因为我需要某些属性来实现逻辑。
有可能吗?
例如,我想以这种方式使用我的 authService:
export function multiTranslateHttpLoaderFactory(http: HttpClient) {
let bc = this.authService.activeBusinessCase$.getValue();
if(bc){
...
}else{
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
}
再简单不过了。
export function multiTranslateHttpLoaderFactory(http: HttpClient, auth: AuthService) {
// add AuthService logic
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
并将其作为依赖项传递
TranslateModule.forRoot ({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient, AuthService]
}
}),
除此解决方案外,您还可以使用 Angular 的注入器 API。
我的 AppComponent 中定义了以下导出函数(class):
export function multiTranslateHttpLoaderFactory(http: HttpClient) {
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
然后以这种方式在 AppModule 的导入数组中使用:
TranslateModule.forRoot ({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient]
}
}),
我需要一种在导出函数中使用我的 AuthService 的方法,因为我需要某些属性来实现逻辑。
有可能吗?
例如,我想以这种方式使用我的 authService:
export function multiTranslateHttpLoaderFactory(http: HttpClient) {
let bc = this.authService.activeBusinessCase$.getValue();
if(bc){
...
}else{
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
}
再简单不过了。
export function multiTranslateHttpLoaderFactory(http: HttpClient, auth: AuthService) {
// add AuthService logic
return new MultiTranslateHttpLoader(http, [
{prefix: './assets/i18n/default/', suffix: '.json'},
{prefix: './assets/i18n/bc/', suffix: '.json'}
]);
}
并将其作为依赖项传递
TranslateModule.forRoot ({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient, AuthService]
}
}),
除此解决方案外,您还可以使用 Angular 的注入器 API。