在我的应用程序中,一个配置对象从窗口注入到 Angular 应用程序。为此,我按照以下思路开发了一些东西:
代码
代表配置的模型
export class AppConfig {
constructor(
public apiKey: string,
public username: string,
public languageCode: string
) { }
}
创建一个 InjectionToken
import { InjectionToken } from '@angular/core';
import { AppConfig } from './shared';
export let APP_CONFIG = new InjectionToken<AppConfig>('appConfig');
然后在 AppModule 中提供
import { APP_CONFIG } from './app-config-export';
....
@NgModule({
....
{ provide: APP_CONFIG, useValue: (window as any).appConfig }
})
export class AppModule { }
最后将其注入组件中
import { AppConfig } from '../shared';
import { APP_CONFIG} from './app-config-export';
....
export class AppComponent implements OnInit {
constructor(
@Inject(APP_CONFIG) private appConfig: any,
private appService: AppService
) { }
ngOnInit() {
this.appService.initApp(this.appConfig);
}
}
AOT 编译
这很好用,但是现在我一直在尝试使用 AOT 编译来构建应用程序。当我使用 AOT 运行应用程序时,appConfig
总是null
. 我猜这与我注入可能与 AOT 不兼容的配置的方式有关。有没有办法让它与 AOT 一起工作?
我在 github https://github.com/angular/angular/issues/19154上找到了这个帖子,但是我不明白“改用工厂”是什么意思。
- 角度:4.4.4
- 网络包:3.8.1
更新
我已经像这样更新了 AppModule:
import { APP_CONFIG } from './app-config-export';
....
export function appConfigFactory() {
return (window as any).appConfig;
}
@NgModule({
....
{ provide: APP_CONFIG, useFactory: appConfigFactory() }
})
export class AppModule { }
解决方案
我已经像这样更新了 AppModule:
import { APP_CONFIG } from './app-config-export';
....
export function appConfigFactory() {
return (window as any).appConfig;
}
@NgModule({
....
{ provide: APP_CONFIG, useFactory: appConfigFactory }
})
export class AppModule { }
我在useFactory
回调中调用函数而不是传递函数。