Angular cli生成服务并在一个步骤中包含提供程序

Pab*_*iel 52 javascript typescript angular-cli

可以使用angular cli生成服务,并在app.module.ts中将其作为提供程序添加到一个步骤中,或者使用ng g service命令中的特殊选项?

执行时:

$ ng g service services/backendApi
installing service
  create src/app/services/backend-api.service.spec.ts
  create src/app/services/backend-api.service.ts
  WARNING Service is generated but not provided, it must be provided to be used
Run Code Online (Sandbox Code Playgroud)

警告已生成服务但未提供服务,必须提供服务才能使用

在它旁边,(并根据警告消息)我通常使用文本编辑器将它添加到app.module.ts上的提供程序部分:

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  imports: [
    ....
  ],
  providers: [BackendApiService],
  bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)

只需一步就可以实现自动化吗?

del*_*eve 88

实际上,在创建服务时可以提供服务(或保护,因为也需要提供).

命令如下......

ng g s services/backendApi --module=app.module

编辑

也可以提供给功能模块,您必须为其提供所需模块的路径.

ng g s services/backendApi --module=services/services.module

  • 从Angular 6开始,`$ ng gs`中的--module标志已被删除.请参阅https://github.com/angular/angular-cli/wiki/generate-service以及Simon_Weaver的回答. (6认同)
  • 角度6的答案至少是不正确的.查看@StuttonY的评论. (3认同)
  • 将提供程序添加到模块不适用于angular 6.使用Angular CLI创建服务只会生成将不会提供的服务,必须提供该服务才能使用。 (2认同)

Sim*_*ver 37

Angular 6 Singleton Services

Angular 6的单例服务的推荐方法是:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class UserService {
}
Run Code Online (Sandbox Code Playgroud)

因此,在该级别注册服务时,--module交换机甚至不再存在,app因为CLI不再需要修改app.module.ts.

这将创建上面的代码,而无需指定模块.

ng g s services/user
Run Code Online (Sandbox Code Playgroud)

因此,如果您希望自己的服务是单身,则必须自行删除providedIn代码.看起来好像目前没有创建它的开关.