ОШИБКА в ошибке обнаружена при статическом разрешении значений символов. Вызов функции вызовов не поддерживается

Я пытаюсь собрать приложение 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?

Другие вопросы по тегам