68 votes

Angular cli génère un service et inclut le fournisseur en une seule étape

Il est possible de générer un service avec angular cli et de l'ajouter en tant qu'élément d'infrastructure. fournisseur dans le app.module.ts en une seule étape ou à l'aide d'une option spéciale dans le programme ng g service commande ?

Quand une exécution :

$ 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

A côté, (et selon le message d'AVERTISSEMENT) je l'ajoute généralement à fournisseur section sur app.module.ts en utilisant l'éditeur de texte :

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

Il est possible de le faire en une seule étape, d'automatiser cela ?

113voto

delasteve Points 1761

En fait, il est possible de fournir le service (ou la garde, puisqu'il faut aussi la fournir) lors de la création du service.

La commande est la suivante...

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

Editar

Il est également possible de fournir un module de fonctionnalité, vous devez lui donner le chemin vers le module que vous souhaitez.

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

0 votes

Existe-t-il un moyen de le fournir à plusieurs endroits également ?

0 votes

En général, c'est une mauvaise pratique de fournir un service dans plus d'un module. Cela dit, le CLI ne le permet pas avec la fonction --module drapeau. Vous pouvez toutefois le faire vous-même, mais je vous recommande de le fournir à un niveau plus élevé de votre application.

0 votes

C'est assez avec ng g s services/userlist --module=app

63voto

Simon_Weaver Points 31141

Angular 6+ Singleton Services

El approche recommandée pour un service singleton pour Angular 6 et au-delà est :

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

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

En fait, le CLI --module commutateur n'existe même plus pour l'enregistrement d'un service au app parce qu'il n'a pas besoin de modifier app.module.ts plus.

Cela créera le code ci-dessus, sans avoir besoin de spécifier un module.

ng g s services/user

Donc si vous Ne le fais pas. si vous voulez que votre service soit un singleton, vous devez supprimer l'élément providedIn vous-même, puis ajoutez-le manuellement à providers pour un composant ou un module chargé paresseusement. Il ne semble pas qu'il y ait actuellement un commutateur pour ne pas générer l'élément providedIn: 'root' Vous devez donc le supprimer manuellement.

1 votes

J'ajoute souvent --help ou --dryRun à la fin d'une commande ng avant de m'engager à l'exécuter. C'est un bon moyen d'apprendre et de se souvenir des options. Notez que dryrun en minuscules ne fonctionne pas !

0 votes

Simon_Weaver -dry-run est une autre syntaxe

0 votes

Vous pouvez également fournir un service dans un module : ex. providedIn: UserModule . angular.io/guide/providers

2voto

user2180794 Points 615

Légère modification de la syntaxe par rapport à la réponse acceptée pour Angular 5 et angular-cli 1.7.0

ng g service backendApi --module=app.module

0 votes

Je viens de vérifier avec un projet de test, et ma réponse fonctionne toujours. Y a-t-il quelque chose qui m'échappe ? La seule différence que je peux voir est que vous allez générer un service dans app/ par rapport au mien qui génère dans app/services (où @Pablo Ezequiel a demandé).

2voto

SoEzPz Points 71

Spécifier les chemins

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

  --two
    two.module.ts
    --services

Créer Service avec un nouveau dossier dans le 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

1voto

student Points 87

Ajouter un service à l'application Angular 4 en utilisant Angular CLI

Un service Angular 2 est simplement une fonction javascript, avec ses propriétés et méthodes associées, qui peut être incluse (via l'injection de dépendances) dans les composants Angular 2.

Pour ajouter un nouveau service Angular 4 à l'application, utilisez la commande ng g service serviceName . Lors de la création du service, le CLI d'Angular affiche une erreur :

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

Pour résoudre ce problème, nous devons fournir la référence du service à l'utilisateur. src\app\app.module.ts à l'intérieur de providers l'entrée de @NgModule méthode.

Initialement, le code par défaut dans le service est :

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

@Injectable()
export class ServiceNameService {

  constructor() { }

}

Un service doit avoir quelques méthodes publiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X