Почему мне нужно экспортировать функцию, которую я использую в модуле импорта angular appModule? - PullRequest
0 голосов
/ 13 мая 2018

У меня следующий код

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    RoutingModule,
    SharedModule,
    JwtModule.forRoot({
      config: {
        headerName: 'Authorization',
        tokenGetter: () => localStorage.getItem('token’), // <———— this line has problem
        whitelistedDomains: ['localhost:4200']
        //blacklistedRoutes: ['localhost:3001/auth/', 'foo.com/bar/']
      }
    })
  ],
  ...
})
export class AppModule { }

Он работает с использованием ng serve, но я получаю следующую ошибку при запуске ng build --prod

ERROR in Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in 'ɵ0'
    'ɵ0' contains the error at app/app.module.ts(36,22)
      Consider changing the function expression into an exported function.

Затем я изменил свой код на

function getToken() {
  return localStorage.getItem('token')
}
…
JwtModule.forRoot({
      config: {
        headerName: 'Authorization',
        tokenGetter: () => getToken, 
        whitelistedDomains: ['localhost:4200’]
...

И все равно это не радует

ERROR in app/app.module.ts(19,10): Error during template compile of 
'AppModule'
  Reference to a non-exported function.

В конце я решил проблему, экспортировав функцию getToken.

У меня следующий вопрос

  1. Почему ng serve работает, а не ng build --prod?
  2. Почему не работает встроенная лямбда?
  3. Почему я должен экспортировать функцию?

1 Ответ

0 голосов
/ 29 марта 2019

Проблемы, с которыми вы столкнулись, связаны с компилятором Ahead-of-Time (AOT) в Angular. По умолчанию ng serve и ng build используют компилятор Just-in-Time (JIT). Однако ng build --prod использует компилятор AOT. Вы можете смоделировать то же самое поведение, выполнив ng serve --aot.

Итак, на ваши вопросы.

  1. См. Объяснение выше.
  2. AOT Collector не поддерживает стрелку функция синтаксис .
  3. Angular генерирует фабрику классов в отдельном модуле и фабрика может получить доступ только к экспорту Функции .

Надеюсь, это поможет!

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