3

在我基于gulp的项目中,我试图实现一个自定义装饰器以进行数据验证,但由于这个错误,我一度陷入困境:

Error: Can't resolve all parameters for LoginService: (?, ?, ?).(…)

或者在其他情况下出现这样的错误:

Unexpected value 'AppComponent' declared by the module 'AppModule'

然后我开始做一些测试,我发现导致这个错误的行是:

import "reflect-metadata";

以下是英雄之旅教程的两个版本:

导入反射元数据导致的错误。

并与解决方案。

编辑

我通过添加我确信此修复程序有效的 angular 版本来编辑标题,从版本 1.3.0 我在使用装饰器时遇到问题,这就是为什么我将我的项目从 gulp 移动到 webpack

4

5 回答 5

4

经过一天的角度调试和编辑我的代码,我找到了解决这个问题的方法,方法是在所有其他导入之上添加另一个导入:

import "reflect-metadata";

到错误中提到的类,即使该类没有使用任何反射元数据对象:

例如,如果您收到如下错误:

Error: Can't resolve all parameters for LoginService: (?, ?, ?).(…)

或者

Unexpected value 'AppComponent' declared by the module 'AppModule'

将导入行添加到类 LoginService 和 AppComponent 以解决该问题。

这是 Plunker 上的工作版本。

编辑

我通过添加我确信此修复程序有效的 angular 版本来编辑标题,从版本 1.3.0 我在使用装饰器时遇到问题,这就是为什么我将我的项目从 gulp 移动到 webpack

于 2016-10-04T10:06:15.913 回答
2

根据 Lemmy4555 的回答(我没有代表发表评论),我可以通过添加来解决这个问题

import "reflect-metadata";

到我的主要角度模块。我还不能确切地解释出了什么问题,但是通过在其他地方导入库,似乎在 angular 的装饰器中抛出了一个扳手,并且依赖注入无法正常工作。

这不是一个理想的解决方案,但 IMO 它比在弹出错误的地方导入它更干净。

于 2016-12-06T01:47:56.820 回答
0

另一个对我有用的选项是使用 Reflect 作为全局变量,根本不导入反射元数据

就像是 declare const global: any; const Reflect = global['Reflect'];

参考https://blog.angularindepth.com/implementing-custom-component-decorator-in-angular-4d037d5a3f0d

于 2017-12-26T03:14:48.123 回答
0

我在控制台中有同样的错误

错误:无法解析 XXX 的所有参数:(?, ?, ?)

我找到了一个在 NgModule 上提供我的服务的解决方案,在这里查看我的答案

我希望能帮助你。

于 2016-09-30T15:26:02.860 回答
0

Unexpected value 'XXX' declared by the module 'AppModule'我通过删除import 'reflect-metadata';语句并为Reflectby安装类型来修复了类似的错误 ( )npm install @types/reflect-metadata --save-dev

于 2016-12-09T12:23:35.270 回答