web-dev-qa-db-fra.com

Angular Décorateur injectable - 0 argument attendu mais 1

Je commence tout juste avec le tutoriel de base pour Angular, mais je suis confronté à un petit problème de compilation.

Je suis le tutoriel sur le site Web de Angular. Je suis coincé avec la partie injection de dépendance car il ne veut pas compiler.

Dans le tutoriel, ils demandent de créer un service avec:

ng generate service hero

Dans ce service généré, vous avez un décorateur comme celui-ci:

@Injectable()

Ensuite, ils demandent d'ajouter un paramètre à ce décorateur comme ceci:

@Injectable({
  providedIn: 'root'
})

Lorsque j'essaie de le faire, j'ai une erreur TypeScript qui me dit:

erreur TS2554: 0 arguments attendus, mais 1. Les versions que j'utilise sont celles-ci:

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

Une idée pourquoi il n'accepte pas le paramètre?

Merci d'avance !

27
Atom

Ceci est une nouvelle fonctionnalité dans Angular 6.

@Injectable({
  providedIn: 'root'
})

Vous avez deux options:

1) Reportez-vous à la documentation Angular 5. (Comme @ r-richards note - changez la version de la documentation en v5 dans le menu déroulant au bas de la liste de navigation de gauche.)

2) Mettez à niveau votre projet à Angular 6 pour résoudre le problème.

Suivez le guide officiel de mise à niveau Angular.

Vous allez remplir un court formulaire en sélectionnant la version de Angular sur laquelle vous vous trouvez et la version à mettre à niveau. Il vous montre ensuite la liste des étapes à suivre pour effectuer la mise à niveau. Vous devez suivre ce guide pour toutes les mises à niveau. (Merci de bien vouloir voter avant de partir) :)

https://update.angular.io/

enter image description here

Voici quelques notes que j'ai prises lors de la mise à niveau de Angular 5 à Angular 6.

Votre kilométrage peut varier en fonction de votre configuration. J'ai lié à un couple d'articles ci-dessous qui m'a aidé.

Mettre à jour npm (Node Package Manager)

npm install npm@latest -g 

Noeud Upgarde

Pour les utilisateurs Windows et mac, la méthode la plus simple consiste à utiliser l'installateur officiel Node. Ou consultez l'article ci-dessous pour linux/unix.

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

Upgarde Angular CLI globalement et localement

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

Mettre à jour package.json

ng update @angular/cli

Update @ Angular/Core

ng update @angular/core

Mettre à jour Angular Matériau si vous l'utilisez

ng update @angular/material

Recherchez d'autres paquets pouvant nécessiter une mise à niveau

npm outdated

Mettre à jour tous les paquets obsolètes

npm update

Ou pour mettre à jour un paquet spécifique

npm update <package name>

Vous devrez peut-être convertir le fichier angular-cli.json en angular.json.

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

Références:

Mise à niveau du nœud

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

Mise à niveau angulaire

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

Autres étapes de dépannage

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

29

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

comme ça:

@NgModule({
    declarations:[

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

    ],
    providers: [
        PostListService 
    ]
})
5
Rafael Marinho