我刚刚开始学习 Angular 的基础教程,但我遇到了一个小的编译问题。
我正在按照 Angular 网站上的教程进行操作。我被依赖注入(inject)部分困住了,因为它不想编译。
在教程中,他们要求创建一个服务:
ng generate service hero
在这个生成的服务中,你有一个像这样的装饰器:
@Injectable()
然后他们要求像这样向装饰器添加一个参数:
@Injectable({
providedIn: 'root'
})
当我尝试这样做时,我收到一个 TypeScript 错误提示:
error TS2554: Expected 0 arguments, but got 1. The versions I use are those ones :
Angular CLI: 1.7.4
Node: 9.5.0
OS: win32 x64
Angular: 5.2.10
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
@angular/cli: 1.7.4
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.5.3
webpack: 3.11.0
知道为什么它不接受参数吗?
提前致谢!
最佳答案
这是 Angular 6 中的一个新特性。
@Injectable({
providedIn: 'root'
})
你有两个选择:
请参阅 Angular 5 文档。 (正如@r-richards 所指出的那样——在左侧导航栏底部的下拉列表中将文档版本更改为 v5。)
将您的项目升级到 Angular 6 以解决问题
遵循官方 Angular 升级指南。
您将填写一个简短的表格,选择您使用的 Angular 版本以及要升级到的版本。然后,它会向您显示执行升级所需采取的必要步骤列表。您应该按照本指南进行所有升级。
这是我在从 Angular 5 升级到 Angular 6 时做的一些笔记。
您的里程数可能因配置而异。我链接到下面几篇对我有帮助的文章。
更新 npm(节点包管理器)
npm install npm@latest -g
升级节点
对于 Windows 和 Mac 用户,最简单的方法是使用官方 Node 安装程序。或参阅以下适用于 linux/unix 的文章。
https://nodejs.org/en/download/
全局和本地升级 Angular CLI
npm install -g @angular/cli
npm install @angular/cli
更新 package.json
ng update @angular/cli
更新@Angular/Core
ng update @angular/core
如果你正在使用 Angular Material,请更新它
ng update @angular/material
检查其他可能需要升级的包
npm outdated
更新所有过时的包
npm update
或者升级一个特定的包
npm update <package name>
您可能需要将 angular-cli.json 文件转换为 angular.json
ng update @angular/cli --migrate-only --from=1.7.4
正如@Sharondio 指出的那样,重启您的 IDE 并没有什么坏处,如果您看到奇怪的现象,此时可能还可以重启您的整个计算机。
引用资料:
升级节点
http://www.hostingadvice.com/how-to/update-node-js-latest-version/
升级 Angular
https://vitalflux.com/upgrade-angular-5-app-angular-6/
其他故障排除步骤
关于Angular Injectable 装饰器 - 预期 0 个参数但得到 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50307628/