В моем приложении объект конфигурации, который вводится из окна в приложение 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
вместо передачи функции.