35 votes

Décorateur injectable angulaire - 0 argument attendu mais 1 obtenu

Je suis juste de commencer avec la base de tutoriel pour Anguleux, mais je fais face à un petit problème de compilation.

Je suis le tutoriel sur Angulaire du site web. Je suis coincé avec l'injection de dépendances en partie parce qu'il ne veut pas compiler.

Dans le tutoriel, il demande de créer un service avec :

ng generate service hero

Dans cette généré le service que vous avez un décorateur, comme ceci :

@Injectable()

Puis ils demandent d'ajouter un paramètre pour que décorateur, comme ceci :

@Injectable({
  providedIn: 'root'
})

Lorsque j'essaie de le faire j'ai un Tapuscrit d'erreur me disant :

erreur TS2554: Attendu 0 arguments, mais j'ai reçu 1. Les versions que j'utilise sont ceux-là :

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

Aucune idée de pourquoi il ne veut pas accepter le paramètre ?

Merci à l'avance !

38voto

Paul R Points 53

C'est une nouvelle fonctionnalité dans Angulaire 6.

@Injectable({
  providedIn: 'root'
})

Vous avez deux options:

1) reportez-vous à l'angle de 5 documentation. (Comme @r-richards notes - changer la version de la documentation à la v5 dans la liste déroulante au bas de la zone de navigation de gauche.)

2) Mise à niveau de votre projet Angulaire de 6 à résoudre le problème

Suivez les officiels Angulaire guide de mise à niveau.

Vous devrez remplir un court formulaire en sélectionnant la version Angulaire et vous êtes sur la version à laquelle vous souhaitez mettre à niveau vers. Ensuite, il vous montre la liste des étapes nécessaires à suivre pour effectuer la mise à niveau. Vous devez suivre ce guide pour toutes les mises à jour. (Veuillez upvote avant de naviguer à l'extérieur) :)

https://update.angular.io/

enter image description here

Voici quelques notes que j'ai prises pendant la mise à niveau à partir Angulaire 5 Angulaire 6.

Votre kilométrage peut varier selon votre configuration. J'ai relié à un couple des articles ci-dessous qui m'ont aidé.

Mise à jour de npm (Node Package Manager)

npm install npm@latest -g 

Upgarde nœud

Pour les utilisateurs Windows et mac, la méthode la plus simple est avec le Nœud de l'installateur. Ou voir l'article ci-dessous pour linux/unix.

https://nodejs.org/en/download/

Upgarde Angulaire de la CLI à l'échelle mondiale et locale

npm install -g @angular/cli
npm install @angular/cli

Package de mise à jour.json

ng update @angular/cli

Mise À Jour @Angulaire/Core

ng update @angular/core

Mise à jour Angulaire du Matériel si vous l'utilisez

ng update @angular/material

Vérifier pour d'autres paquets qui peuvent être mis à niveau

npm outdated

Mise à jour de tous les paquets obsolètes

npm update

Ou mettez à jour un package spécifique

npm update <package name>

Vous pouvez avoir besoin de convertir le angulaires-cli.fichier json angulaire.json

ng update @angular/cli --migrate-only --from=1.7.4

Références:

La Mise À Niveau Du Nœud

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

La Mise À Niveau Angulaire

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

D'Autres Étapes De Dépannage

https://stackoverflow.com/a/49811824/151325

7voto

Rafael Marinho Points 61

J'ai également eu ce problème, et je l'ai résolu en incluant le nom du service de classe dans "Fournisseurs" dans app.module.ts.

comme ça:

 @NgModule({
    declarations:[

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

    ],
    providers: [
        PostListService 
    ]
})
 

1voto

Kurkov Igor Points 46

pour angulaire 5, vous ne devez PAS définir le paramètre et laisser comme

@Injectable(/* without any parameter here for angular 5 */)

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