我正在尝试使用我的Angular CLI(1.0.0-rc.1)应用程序来构建产品并收到AOT错误。我实际上有2个应用程序:主应用程序和一些用于某些UI小部件的npm安装应用程序。 UI小部件应用程序需要一些配置数据(路径,密钥等)。
这是我的主要应用程序中的代码,它汇编了配置数据并将其传递给UI Widget模块:
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放在需要它的每个组件的构造函数中。
感谢。
答案 0 :(得分:0)
与GünterZöchbauer的谈话被删除了。我不确定为什么或谁删除它。
这是Günter提出的代码建议:
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
}
]
};
}
}
问题是我如何将配置参数传递给forRoot到configHelperFactory所以我可以填充ClientConfigService.ConfigModel?
Günter建议制作'export const config:ConfigModel'。使const配置不起作用,因为它是一个const,必须用值初始化,一旦const初始化,就不能修改它。
那么,如何使用传递给forRoot的值填充ClientConfigService.ConfigModel?