1

Ich versuche, meine Angular CLI (1.0.0-rc.1) App für die Produktion zu bauen und bekomme einen AOT-Fehler. Ich habe tatsächlich 2 Apps: primäre App und eine npm installierte App für einige UI-Widgets. Die UI-Widgets-App erfordert einige Konfigurationsdaten (Pfade, Schlüssel usw.).ERROR in Fehler beim statischen Auflösen von Symbolwerten. Calling Function Calls werden nicht unterstützt

Hier ist mein Code in meiner primären Anwendung, die die Konfigurationsdaten assembliert und übergibt sie an UI Widget-Modul:

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: 
      [] 
     }; 
    } 
} 

und hier ist die 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) 
       } 
      ] 
     }; 
    } 
} 

Mein UIWidgetModule verwendet einen Service (ClientConfigService) um die Konfigurationsdaten vom Client zu halten. Nachfolgende Komponenten verwenden verschiedene Funktionen in ClientConfigService, um die Konfigurationsdaten zu verwenden. Der Kicker ist ClientConfigService ist statisch.

hier 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; 
    }; 
} 

Der Erstellungsprozess für die Produktion (AOT) scheitert kläglich versucht, den Konfigurationswert für die statische Variable von ClientConfigService einzustellen. Wie verzehre ich die Konfigurationsdaten in meinem Widget-Modul? Ich liebe es, einen statischen Dienst zu haben, der die Daten liefert, so dass ich ClientConfigService nicht im Konstruktor jeder Komponente löschen muss, die sie benötigt.

Danke.

+0

Wie kommen die Kommentare gelöscht? –

+0

@ Günter Zöchbauer - was ist mit unserem Gespräch passiert? –

Antwort

0

Einige wie das Gespräch mit Günter Zöchbauer gelöscht wurde. Ich bin mir nicht sicher warum oder wer es gelöscht hat.

Hier ist der Code-Vorschlag von Günter gemacht:

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 
       } 
      ] 
     }; 
    } 
} 

Das Problem ist, wie werde ich Config-Parameter in forRoot zu configHelperFactory geleitet, so kann ich ClientConfigService.ConfigModel bevölkern?

Günter schlug vor, 'export const config: ConfigModel' zu machen. Making const config funktioniert nicht, weil es ein const ist und mit einem Wert initialisiert werden muss und sobald ein const initialisiert ist, kann es nicht geändert werden.

Also, wie füllen Sie ClientConfigService.ConfigModel mit dem an forRoot übergebenen Wert?

Verwandte Themen