问题描述
这在 Angular 4.x 中很好,只是在 Angular 5.0.1 中不行.此项目是使用 Angular CLI 生成的.
This is fine in Angular 4.x, just not Angular 5.0.1. This project was generated with Angular CLI.
compiler.js:466 Uncaught Error: Can't resolve all parameters for RegistrationService: (?).
at syntaxError (compiler.js:466)
at CompileMetadataResolver._getDependenciesMetadata (compiler.js:15546)
at CompileMetadataResolver._getTypeMetadata (compiler.js:15381)
at CompileMetadataResolver._getInjectableMetadata (compiler.js:15361)
at CompileMetadataResolver.getProviderMetadata (compiler.js:15721)
at eval (compiler.js:15632)
at Array.forEach (<anonymous>)
at CompileMetadataResolver._getProvidersMetadata (compiler.js:15592)
at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15160)
at CompileMetadataResolver.getNgModuleSummary (compiler.js:14998)
syntaxError @ compiler.js:466
CompileMetadataResolver._getDependenciesMetadata @ compiler.js:15546
CompileMetadataResolver._getTypeMetadata @ compiler.js:15381
CompileMetadataResolver._getInjectableMetadata @ compiler.js:15361
CompileMetadataResolver.getProviderMetadata @ compiler.js:15721
(anonymous) @ compiler.js:15632
CompileMetadataResolver._getProvidersMetadata @ compiler.js:15592
CompileMetadataResolver.getNgModuleMetadata @ compiler.js:15160
CompileMetadataResolver.getNgModuleSummary @ compiler.js:14998
(anonymous) @ compiler.js:15086
CompileMetadataResolver.getNgModuleMetadata @ compiler.js:15071
JitCompiler._loadModules @ compiler.js:33486
JitCompiler._compileModuleAndComponents @ compiler.js:33447
JitCompiler.compileModuleAsync @ compiler.js:33363
CompilerImpl.compileModuleAsync @ platform-browser-dynamic.js:230
PlatformRef.bootstrapModule @ core.js:5446
(anonymous) @ main.ts:12
../../../../../src/main.ts @ main.bundle.js:640
__webpack_require__ @ inline.bundle.js:55
1 @ main.bundle.js:670
__webpack_require__ @ inline.bundle.js:55
webpackJsonpCallback @ inline.bundle.js:26
(anonymous) @ main.bundle.js:1
这是构造函数的样子:
constructor(
private apiHelperService: ApiHelperService
) {
}
该类有@Injectable()
The class has @Injectable()
@Injectable()
export class ApiHelperService {
它也已正确导入到模块提供程序中.
It has also properly imported into the module providers.
providers: [
AuthGuard,
ApiHelperService,
如果我把它改成这个,那么错误就会消失并且它可以工作,但是它希望你将整个解决方案中的每个构造函数更改为这个语法,我认为这是不正确的.
If I change it to this, then the error goes away and it works, but then it wants you to change every constructor in the entire solution to this syntax, which I don't believe to be correct.
@Inject(ApiHelperService) private apiHelperService: ApiHelperService
这是我的 tsconfig.json,它确实已将 emitDecoratorMetadata 正确设置为 true
Here is my tsconfig.json, which does have emitDecoratorMetadata properly set to true
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
]
}
}
推荐答案
在 Angular 5 更新博客文章 作者提到他们使用的是静态注入器而不是基于反射的注入器,并提到不再需要反射 polyfills,但在我的情况下它是.
In Angular 5 Update blog post the author mentions that they are using a static injector instead of a reflection based one and mentions that the reflection polyfills are no longer needed but in my case it was.
如果您删除了反射的 polyfill,请尝试再次添加它们:
If you removed the polyfills for reflections try adding them again:
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';
我希望它也适合你.
这篇关于从 Angular 4 升级到 5.0.1 时出现“未捕获的错误:无法解析所有参数"的运行时错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!