Angular cli genereert een service en voegt de provider in één stap toe

Het is mogelijk om een ​​dienst te genereren met angular cli en deze toe te voegen als een providerin de app.module.tsin een enkele stap of met behulp van een speciale optie in de ng g servicecommando?

Wanneer een uitvoering:

$ 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

WAARSCHUWING Service wordt gegenereerd maar niet geleverd, deze moet worden verstrekt om te kunnen worden gebruikt

Daarnaast (en volgens het WAARSCHUWINGsbericht) voeg ik het meestal toe aan de sectie providerop app.module.tsmet behulp van de teksteditor:

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

Het is mogelijk om het in één stap te doen, om dit te automatiseren?


Antwoord 1, autoriteit 100%

Eigenlijk is het mogelijk om de service te verlenen (of te bewaken, aangezien dat ook moet worden geleverd) bij het maken van de service.

Het commando is het volgende…

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

Bewerken

Het is ook mogelijk om een ​​functiemodule te voorzien, u moet deze het pad naar de gewenste module geven.

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


Antwoord 2, autoriteit 56%

Angular 6+ Singleton Services

De aanbevolen aanpakvoor een singleton-service voor Angular 6 en hoger is:

import { Injectable } from '@angular/core';
@Injectable({
  providedIn: 'root',
})
export class UserService {
}

In feite doet de CLI --module-switch niet bestaat niet eens meervoor het registreren van een dienst op appniveau omdat het niet meer nodig is om app.module.tsaan te passen.

Hiermee wordt de bovenstaande code gemaakt, zonder dat u een module hoeft op te geven.

ng g s services/user

Dus als u nietwilt dat uw service eenmalig is, moet u de providedIn-code zelf verwijderen – en deze vervolgens handmatig toevoegen aan providersvoor een component of lui geladen module. Het lijkt erop dat er momenteel geen optie is om het providedIn: 'root'-gedeelte niet te genereren, dus je moet het handmatig verwijderen.


Antwoord 3, autoriteit 2%

Geef paden op

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

Maak Servicemet nieuwe map in module ONE

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

Antwoord 4, autoriteit 2%

kleine verandering in syntaxis van het geaccepteerde antwoord voor Angular 5 en angular-cli 1.7.0

ng g service backendApi --module=app.module

Antwoord 5

Voeg een service toe aan de Angular 4-app met Angular CLI

Een Angular 2-service is gewoon een javascript-functie, samen met de bijbehorende eigenschappen en methoden, die kunnen worden opgenomen (via afhankelijkheidsinjectie) in Angular 2-componenten.

Gebruik het commando ng g service serviceNameom een ​​nieuwe Angular 4-service aan de app toe te voegen. Bij het maken van de service geeft de Angular CLI een fout weer:

WAARSCHUWING Service wordt gegenereerd maar niet geleverd, deze moet worden verstrekt om te kunnen worden gebruikt

Om dit op te lossen, moeten we de servicereferentie verstrekken aan de src\app\app.module.tsbinnen de providers-invoer van @NgModulemethode.

Aanvankelijk is de standaardcode in de service:


import { Injectable } from '@angular/core';
@Injectable()
export class ServiceNameService {
  constructor() { }
}

Een service moet een paar openbare methoden hebben.


Antwoord 6

Doe in Angular 5.12 en de nieuwste Angular CLI

ng generate service my-service -m app.module

Antwoord 7

Het lijkt erop dat we in Angular v11 en hoger geen optie “s” meer hebben:

ng g service services/backendApi

of zo:

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

Antwoord 8

Ga in de opdrachtprompt naar de projectmap en voer het volgende uit:

ng g s servicename

Antwoord 9

voer de onderstaande code uit in Terminal

zorg ervoor dat u zich in uw projectmap in terminal bevindt

ng g s servicename --module=app.module

Other episodes