2016-11-16 7 views
3

suppoted Wenn ich angular2 AoT verwenden, erhalte ich eine Fehlermeldung:angular2 AoT Fehler Funktionsaufrufe sind nicht

Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 54:17 in the original .ts file), resolving symbol COMPILER_PROVIDERS in 

und in meiner Richtlinie Modul, ich habe Code wie folgt:

import { COMPILER_PROVIDERS } from '@angular/compiler'; 
@NgModule({ 
/*imports ...*/ 
providers: [ 
    COMPILER_PROVIDERS, 
] 
}) 

Ich verstehe daß ich die COMPILER_PROVIDERS zu einer exportierten Funktion ändern, aber wenn ich den Quellcode von @ Winkel/Compiler überprüfen, finde ich diese:

export declare const COMPILER_PROVIDERS: Array<any | Type<any> | { 
    [k: string]: any; 
} | any[]>; 

export declare class RuntimeCompilerFactory implements CompilerFactory { 
    private _defaultOptions; 
    constructor(defaultOptions: CompilerOptions[]); 
    createCompiler(options?: CompilerOptions[]): Compiler; 
} 

Ich weiß nicht, wie die COMPILER_PROVIDERS funktioniert, und ich weiß nicht, wie Sie es in eine exportierte Funktion in meinem Modul übertragen. Ich werde es schätzen, wenn mir jemand helfen kann!

+0

Mit dem gleichen Problem und konnte noch keine Lösung finden ... – Sebastian

Antwort

8

Die Lösung besteht darin, COMPILER_PROVIDERS nicht mehr zu verwenden. Außerdem müssen Sie JitCompiler nicht in Ihre Providerliste aufnehmen.

Verwenden Sie stattdessen JitCompilerFactory von "@ Angular/Compiler". Es ist nicht injizierbare, so dass nur eine neue Instanz davon erstellen sich wie folgt aus:

private compiler: Compiler = new JitCompilerFactory([{useDebug: false, useJit: true}]).createCompiler(); 

Der Rest wie vor, zum Beispiel arbeitet folgende Radim Kohlers ausgezeichnete Antwort here.

+0

Vielen Dank Sebastian, das hat mir wirklich geholfen! – maxbellec

+2

Wer arbeitet JitCompiletFactory mit AOT-Probe? Wenn ich es benutze, bekomme ich immer No NgModule Metadaten für DynamicHtmlModule – user2771738

+2

Ich wollte nur hinzufügen, dass der gezeigte Compiler von @ angular/core kommt, nicht @ angular/compiler wie der vorherige JitCompiler und die Factory. Nahm mich eine Weile, um es zu finden. – Tarmo

Verwandte Themen