无法仅在非AOT模式下解析服务(?)的参数

时间:2017-10-01 13:15:46

标签: angular angular-material2 angular2-aot angular2-di

我见过许多AoT编译因某种原因失败的情况,或者产生了一个奇怪的运行时错误。我有相反的问题:我的应用在非AoT模式下失败并出现错误:

  

无法解析ConfirmRemoveService(?)

的所有参数

无论我是针对开发还是制作,以及我是否使用devprod环境,都会出现这种情况。例如,只要我也明确打开AoT,纯粹的dev构建就会成功:

ng serve -dev --aot

上面的错误消息中的?引用了Angular Material2库中的类型MatDialog。 (此ConfirmRemoveService是组件用于建立模态对话框的服务。)

此问题可能与升级到该库的beta 11版本有关,也可能与此无关。它可能与我从MaterialModule直接从库中导入更改有关,因为MaterialModule现已被删除,我自己的模块会导入单个Angular Material2模块,例如{{1 }};然后我在必要时导入该模块。但是,这些都不会阻止应用程序在AoT模式下运行;只是在非AoT模式下,错误才会显现出来。

是否有人意识到只有在非AoT场景中才会出现此类问题的情况,为什么?

1 个答案:

答案 0 :(得分:0)

此问题原因是tsconfig.json中缺少一行:

"emitDecoratorMetadata": true

我认为我在一些家务管理中删除了这一点,认为只有在编译Angular友好库时才有必要。

我怀疑在AoT下运行时,ngc代替tsc,而ngc默认提供此设置,因此只会在非AoT中显示错误模式。