Angular APP_INITIALIZER随机编译器错误 - 还有其他人遇到过吗?

时间:2017-06-17 03:41:47

标签: angular

我想我在Angular中发现了一个错误,但我不确定它,它实际上出现在我还不熟悉的区域。如果有人能够证实它可能存在,那就太棒了,因为我不愿意报告它。

我有一个名为SettingsService的服务,它有一个名为loadSettings()的函数。顾名思义,它会加载设置。它应该在应用加载之前调用,我通过将其添加到providers的{​​{1}}部分来实现:

app.module.ts

错误在于它有时可以工作,有时甚至不工作,甚至不更改providers: [SettingsService, { provide: APP_INITIALIZER, useFactory: (config: SettingsService) => () => config.loadSettings(), deps: [SettingsService], multi: true }, 或服务本身。有时我只是停止NG Live Development Server,重新启动它,代码突然无法编译。我收到的错误消息是:

app.module.ts

起初我尝试了各种修补,比如删除lambda函数并使用一个命名的函数,但是一旦我回滚到原始版本,它突然起作用了。我能够重现它,但它只是随机发生的。刚才我又收到了这个错误消息,我只是通过添加一个空格,删除它,保存来修复它,并且当ng-cli重新编译应用程序时,它现在有效了。没有一点实际代码被改变了!

我想知道是否有人对这个原因有所了解。

1 个答案:

答案 0 :(得分:2)

您的代码应该进行静态分析。所以

export function init(config: SettingsService) {
  return () => config.loadSettings();
}

providers: [
  SettingsService,
  {
    provide: APP_INITIALIZER,
    useFactory: init,
    deps: [SettingsService],
    multi: true
  }
]

另见