Angular Injectable装饰器 - 预期0个参数但得到1

Ato*_*tom 30 typescript angular-cli angular

我刚刚开始使用Angular的基础教程,但是我遇到了一个小的编译问题.

我正在关注Angular网站上的教程.我坚持使用依赖注入部分,因为它不想编译.

在教程中,他们要求创建一个服务:

ng generate service hero
Run Code Online (Sandbox Code Playgroud)

在这个生成的服务中,你有一个像这样的装饰器:

@Injectable()
Run Code Online (Sandbox Code Playgroud)

然后他们要求向该装饰器添加一个参数,如下所示:

@Injectable({
  providedIn: 'root'
})
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我遇到TypeScript错误告诉我:

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
Run Code Online (Sandbox Code Playgroud)

我使用的版本是那些:

ng generate service hero
Run Code Online (Sandbox Code Playgroud)

知道为什么它不接受参数吗?

提前致谢 !

Fra*_*nia 30

这是Angular 6中的一项新功能.

@Injectable({
  providedIn: 'root'
})
Run Code Online (Sandbox Code Playgroud)

您有两种选择:

1)请参阅Angular 5文档.(正如@ r-richards所说 - 在左侧导航栏底部的下拉列表中将文档版本更改为v5.)

2)将您的项目升级到Angular 6以解决问题

按照Angular官方升级指南进行操作.

您将填写一份简短表格,选择您所使用的Angular版本以及要升级到的版本.然后,它会显示执行升级所需的步骤列表.您应该按照本指南进行所有升级.(请先导航离开之前):) :)

https://update.angular.io/

在此输入图像描述

以下是我从Angular 5升级到Angular 6时的一些注意事项.

您的里程可能因您的配置而异.我链接到下面的几篇帮助我的文章.

更新npm(节点包管理器)

npm install npm@latest -g 
Run Code Online (Sandbox Code Playgroud)

Upgarde节点

对于Windows和mac用户,最简单的方法是使用官方的Node安装程序.或者参见下面的linux/unix文章.

https://nodejs.org/en/download/
Run Code Online (Sandbox Code Playgroud)

Upgarde Angular CLI全球和本地

npm install -g @angular/cli
npm install @angular/cli
Run Code Online (Sandbox Code Playgroud)

更新package.json

ng update @angular/cli
Run Code Online (Sandbox Code Playgroud)

更新@ Angular/Core

ng update @angular/core
Run Code Online (Sandbox Code Playgroud)

如果您正在使用它,请更新角度材质

ng update @angular/material
Run Code Online (Sandbox Code Playgroud)

检查可能需要升级的其他软件包

npm outdated
Run Code Online (Sandbox Code Playgroud)

更新所有过时的软件包

npm update
Run Code Online (Sandbox Code Playgroud)

或升级特定包

npm update <package name>
Run Code Online (Sandbox Code Playgroud)

您可能需要将angular-cli.json文件转换为angular.json

ng update @angular/cli --migrate-only --from=1.7.4
Run Code Online (Sandbox Code Playgroud)

参考文献:

升级节点

http://www.hostingadvice.com/how-to/update-node-js-latest-version/

升级角度

https://vitalflux.com/upgrade-angular-5-app-angular-6/

其他故障排除步骤

/sf/answers/3486827711/

  • 而重要的部分(只花了我大约45分钟才算出来)......重新启动你的IDE,以便它识别正确的TS Linting. (4认同)

小智 5

我也有这个问题,我已经解决了它,包括app.module.ts中"Providers"中的类服务的名称.

像这样:

@NgModule({
    declarations:[

    ],
    imports:[
        CommonModule,
        HttpClientModule
    ],
    exports:[

    ],
    providers: [
        PostListService 
    ]
})
Run Code Online (Sandbox Code Playgroud)