角点生成一个服务并将提供者包含在一个步骤中

有可能生成一个有角的 cli 的服务,并将其作为 应用程序模块中的 提供者在一个步骤中添加,或者使用 电讯服务命令中的特殊选项?

执行时:

$ 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

WARNING Service is generated but not provided, it must be provided to be used

在它旁边(根据 WARWN 消息) ,我通常使用文本编辑器将它添加到 应用程序模块提供者部分:

@NgModule({
declarations: [
AppComponent,
...
],
imports: [
....
],
providers: [BackendApiService],
bootstrap: [AppComponent]
})

这是可能的做到这一点,一个单一的步骤,自动化这一点?

169615 次浏览

实际上,在创建服务时可以提供服务(或警卫,因为也需要提供这种服务)。

命令如下..。

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

剪辑

也可以向功能模块提供,您必须为它提供所需模块的路径。

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

使用角度 CLI 向 Angular 4应用程序添加服务

Angular 2服务只是一个 javascript 函数,以及它相关的属性和方法,可以包含(通过依赖注入)到 Angular 2组件中。

要向应用程序添加一个新的 Angular 4服务,请使用命令 ng g service serviceName。在创建该服务时,Angular CLI 显示一个错误:

WARNING Service is generated but not provided, it must be provided to be used

为了解决这个问题,我们需要在 @NgModule方法的 providers输入中提供对 src\app\app.module.ts的服务引用。

最初,服务中的默认代码是:


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


@Injectable()
export class ServiceNameService {


constructor() { }


}

服务必须有一些公共方法。

指定路径

--app
--one
one.module.ts
--services


--two
two.module.ts
--services

用模块 中的新文件夹创建 服务

ng g service one/services/myNewServiceFolderName/serviceOne --module one/one


--one
one.module.ts // service imported and added to providers.
--services
--myNewServiceFolderName
serviceOne.service.ts
serviceOne.service.spec.ts

与 Angular 5和 angle-cli 1.7.0的公认答案相比,在语法上略有改变

ng g service backendApi --module=app.module

在角度5.12和最新的角度 CLI,做

ng generate service my-service -m app.module

角6 + 单点服务

角度6及以上单点服务的 建议的方法是:

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


@Injectable({
providedIn: 'root',
})
export class UserService {
}

事实上,CLI--module交换机 已经不存在了用于在 app级注册服务,因为它不再需要修改 app.module.ts

这将创建上面的代码,而不需要指定模块。

ng g s services/user

因此,如果您想让 不要成为一个单例服务,您必须自己删除 providedIn代码,然后手动将其添加到 providers中,以获得组件或延迟加载模块。目前看起来没有一个开关不生成 providedIn: 'root'部分,所以您需要手动删除它。

在命令提示符中,转到项目文件夹并执行以下操作:

ng g s servicename

在终端运行以下代码

确保您在终端的项目文件夹中

ng g s servicename --module=app.module

看起来在角度 v11或更高,我们没有选项“ s”了:

ng g service services/backendApi

或者像这样:

ng g service services/backendApi --flat --skipTests=true
ng generate service userService


//shorthand for creating service
ng g s serviceName

** 当您触发此命令时,它将自动在提供程序数组中注册。 **

providers: [
UserService
]