错误的错误遇到了静态解析符号值.不支持呼叫功能调用



我正在尝试使我的Angular CLI(1.0.0.0-rc.1)应用程序构建为ProductOn,并且正在遇到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中使用各种功能来消耗配置数据。KIKER是ClientConfigservice是静态的。

以下是客户端Conconfigservice:

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)失败了,试图为客户端Conconfigservice的静态变量设置配置值。如何在小部件模块中消耗配置数据?我喜欢静态服务提供数据,因此我不必将ClientConfigservice放入每个需要它的组件的构造函数中。

谢谢。

一些与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建议制作"导出const config:configmodel"。制作const配置不起作用,因为它是const,必须用一个值初始化,一旦const初始化,就无法修改。

那么,如何填充客户clientconfigservice.configmodel,并传递给forroot?

最新更新