Почему Angular AoT не поддерживает выражения функций в декораторах? - PullRequest
0 голосов
/ 05 ноября 2018

Угловой компилятор AoT выдает ошибку, если вы пытаетесь сделать вызов в декораторе.

рассмотрите следующий код:

export function factoryBuilder(config: MyConfig) {
  return function customFactory() {
    return new MyService(config);
  };
}

@NgModule({})
export class MyModule {

  static forRoot(config: MyConfig): ModuleWithProviders {

    return {
      ngModule: MyModule,
      providers: [
        {
          provide: MyService,
          useFactory: factoryBuilder(config),
        }]
    };
  }
}

Если вы попытаетесь собрать его с флагом aot (--prod):

Компилятор говорит:

ERROR in Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in 'MyModule'
   ...
    Consider changing the function expression into an exported function.

Может кто-нибудь объяснить технически, почему компилятор не может это поддерживать?

PS: этот код работает в режиме JiT.

1 Ответ

0 голосов
/ 05 ноября 2018

Функции стрелок (или лямбда-выражения) не поддерживаются в модулях, поскольку компилятор AOT должен иметь возможность анализировать модуль «статически».

Использование нормальной function вместо функции стрелки должно решить проблему:

export function myFactory(config) { };

Возможно, вам придется сделать то же самое с функцией customFactory, возвращаемой myFactory.

Более подробную информацию о том, как работает AOT, можно найти в официальном руководстве или в этом шпаргалке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...