Angular 将角度服务注入导出的函数?
我在AppComponent中定义了以下导出函数(类外):Angular 将角度服务注入导出的函数?,angular,typescript,function,dependency-injection,angular-services,Angular,Typescript,Function,Dependency Injection,Angular Services,我在AppComponent中定义了以下导出函数(类外): export function multiTranslateHttpLoaderFactory(http: HttpClient) { return new MultiTranslateHttpLoader(http, [ {prefix: './assets/i18n/default/', suffix: '.json'}, {prefix: './assets/i18n/bc/', suffix: '.json'
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]
}
}),
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'}
]);
}
}
我需要一种在导出函数中使用AuthService的方法,因为我需要某些属性来实现逻辑
有可能吗
例如,我希望以以下方式使用我的authService:
TranslateModule.forRoot ({
loader: {
provide: TranslateLoader,
useFactory: multiTranslateHttpLoaderFactory,
deps: [HttpClient]
}
}),
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
为什么不将它添加到
deps
列表和工厂参数列表中呢?嗯,我不明白。好吧,你看到你是如何将HttpClient注入其中的了吗?只要在服务中再做一次就行了。看起来很有效。但是我不需要把我的函数写回到AppModule里面,对吗?因为我想把它保存在AppComponent中,所以我的AppModule是clean.ehm。功能位置完全由您决定。没有人在这方面限制你