ОШИБКА в ошибке обнаружена при статическом разрешении значений символов. Вызов функции вызовов не поддерживается
Я пытаюсь собрать приложение Angular CLI (1.0.0-rc.1) для производства и получаю ошибку AOT. У меня на самом деле есть 2 приложения: основное и установленное приложение для некоторых виджетов интерфейса пользователя. Приложение виджетов пользовательского интерфейса требует некоторые данные конфигурации (пути, ключи и т. Д.).
Вот мой код в моем основном приложении, которое собирает данные конфигурации и передает их в модуль виджета UI:
export const config: ConfigData =
{
UrlRoot: 'XXXX',
Key: 'ZZZZ'
}
@NgModule({
imports:
[
UiWidgetModule.forRoot(config)
],
declarations:
[],
exports:
[]
})
export class CoreModule
{
static forRoot(): ModuleWithProviders
{
return {
ngModule: CoreModule,
providers:
[]
};
}
}
и вот UIWidgetModule:
export function configHelperFactory(config: ConfigData)
{
ClientConfigService.ConfigModel = config;
return ClientConfigService;
}
@NgModule({
imports:
[
CommonModule
],
declarations:
[
//COMPONENTS
],
exports:
[
//COMPONENTS
],
entryComponents:
[
//COMPONENTS
],
providers:
[
]
})
export class UiWidgetModule
{
static forRoot(config: ConfigData): ModuleWithProviders
{
return {
ngModule: UiWidgetModule,
providers:
[
ClientConfigService,
{
provide: ClientConfigService,
useFactory: configHelperFactory(config)
}
]
};
}
}
Мой UIWidgetModule использует сервис (ClientConfigService) для хранения данных конфигурации от клиента. Последующие компоненты используют различные функции в ClientConfigService для использования данных конфигурации. Кикер это ClientConfigService статический.
Вот ClientConfigService:
import { ConfigData } from "../models/index";
export class ClientConfigService
{
static ConfigModel: ConfigData ;
static BuildMediaUrl(nodeId: string) : string
{
return ClientConfigService.ConfigModel.UrlRoot+ '/' + nodeId;
};
static GetKey(): string
{
return ClientConfigService.ConfigModel.Key;
};
}
Процесс сборки для производства (AOT) терпит неудачу, пытаясь установить значение конфигурации для статической переменной ClientConfigService. Как мне использовать данные конфигурации в моем модуле виджета? Мне нравится, когда статический сервис предоставляет данные, поэтому мне не нужно помещать ClientConfigService в конструктор каждого компонента, нуждающегося в этом.
Благодарю.
1 ответ
Кое-как разговор с Гюнтером Цохбауэром был удален. Я не уверен, почему или кто это удалил.
Вот кодовое предложение, сделанное Гюнтером:
export const config: ConfigModel = new ConfigModel();
export function configHelperFactory()
{
console.log('CONFIG:', config);
ClientConfigService.ConfigModel = config;
}
@NgModule({
imports:
[
CommonModule
],
declarations:
[
//COMPONENTS
],
exports:
[
//COMPONENTS
],
entryComponents:
[
//COMPONENTS
],
providers:
[
]
})
export class UiWidgetModule
{
static forRoot(config: ConfigModel): ModuleWithProviders
{
return {
ngModule: UiWidgetModule,
providers:
[
ClientConfigService,
{
provide: ClientConfigService,
useFactory: configHelperFactory
}
]
};
}
}
Проблема в том, как мне передать параметр config в forRoot в configHelperFactory, чтобы я мог заполнить ClientConfigService.ConfigModel?
Гюнтер предложил сделать "экспорт константной конфигурации: ConfigModel". Создание const config не работает, потому что это const и должно быть инициализировано значением, а после инициализации const его нельзя изменить.
Итак, как вы заполняете ClientConfigService.ConfigModel значением, переданным для forRoot?