为什么必须导出我在angular appModule导入模块中使用的功能?

ycshao

我有以下代码

@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. 为什么内联Lambda不起作用?
  3. 为什么必须导出功能?
提神

您遇到的问题是由于Angular中Ahead-of-Time(AOT)编译器引起的。默认情况下,ng serveng build用刚刚实时(JIT)编译器。但是,ng build --prod使用AOT编译器。您可以模拟同样的行为ng serve --aot

所以,对你的问题。

  1. 请参阅上面的说明。
  2. AOT收集器不支持箭头函数语法
  3. Angular在单独的模块中生成类工厂,该工厂只能访问导出的函数

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我必须使用向前引用“this”关键字?

为什么我必须在包的__init__.py中使用相对导入?

为什么React JS找不到我导出的模块?

为什么我可以多次导出同一功能?

为什么我必须调用NgZone.run来使用breezejs在Angular2中进行更新?

为什么我们在nodejs中使用导出?

如果我只是从numpy模块引用它,为什么我必须从numpy导入它

在Angular X的子模块中使用AppModule中的组件(X代表2+)

在异步功能中,为什么我必须等待?

Angular-模块AppModule导入的意外值MatDialog

在Vue.js中,为什么在导入组件后必须导出组件?

为什么我必须在React中使用“ require”而不是“ import from”来导入图像?

为什么我必须在类中使用foo()而不是功能foo()?

为什么从模块导入功能会导入整个模块?

为什么我必须导入Ordering.Implicits?

为什么我必须使用Kafka Streams配置状态存储

为什么我的PowerShell模块不能正确导出成员,为什么不能导出嵌套模块?

为什么我必须使用Backbone。$ = browserify中的require('jquery')

为什么我必须使用python中的电子邮件模块“从模块导入”?

为什么我必须使用for循环而不是foreach循环?

为什么从模块导入*中使用坏习惯?

为什么我必须在mongoDB查询中使用+

[Angular,Jersey]为什么我必须使用Jersey在$ http中指定应用程序名称

为什么我必须双击才能激活jquery功能?

导入的模块不能让我使用它包含的功能

为什么我得到:无法从使用“/”推导出(分数 a)?

我什么时候必须在模块中使用 CONTAINS?

当我在模块导出中使用它时,为什么带有 return 的函数给我 undefined?节点.js

为什么在根模块(AppModule)中导入和重新导出CommonModule时需要将其导入其他自定义/子模块