angular2 Ошибка AoT Вызовы функций не поддерживаются

Когда я использую angular2 AoT, я получаю сообщение об ошибке:

 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

и в моем модуле директив у меня есть такой код:

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

Я понимаю, что должен изменить COMPILER_PROVIDERS на экспортированную функцию, но когда я проверяю исходный код @angular/compiler, я нахожу это:

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

Я не знаю, как работает COMPILER_PROVIDERS, и я не знаю, как передать его экспортируемой функции в моем модуле.


person Micarle    schedule 16.11.2016    source источник
comment
Столкнулся с такой же проблемой, а решения пока не нашел...   -  person Sebastian    schedule 03.01.2017


Ответы (1)


Решение состоит в том, чтобы больше не использовать COMPILER_PROVIDERS. Кроме того, вам не нужно включать JitCompiler в свой список провайдеров.

Вместо этого используйте JitCompilerFactory из "@angular/compiler". Он не является инъекционным, поэтому просто создайте новый экземпляр самостоятельно, например так:

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

Остальное работает, как и раньше, например, после отличного ответа Радима Колера здесь.

person Sebastian    schedule 04.01.2017
comment
Большое спасибо, Себастьян, это действительно помогло мне! - person maxbellec; 20.01.2017
comment
У кого-нибудь есть рабочий JitCompiletFactory с образцом AOT? Когда я его использую, я всегда получаю метаданные NgModule, найденные для DynamicHtmlModule. - person user2771738; 02.03.2017
comment
Просто хотел добавить, что показанный компилятор исходит из @angular/core, а не из @angular/compiler, как предыдущий JitCompiler и фабрика. Мне потребовалось время, чтобы найти его. - person Tarmo; 05.04.2017
comment
Я удалил COMPILER_PROVIDERS и реализовал JitCompilerFactory. Но мне потребовалось некоторое время, чтобы заметить комментарий @Tarmo. И да, это начинает работать для меня как шарм. Нужно включить Compiler из @angular/core. - person The Hungry Dictator; 03.08.2017