Angulaire aucun fournisseur pour NameService
J'ai un problème de chargement d'une classe en angle composant. J'ai essayé de le résoudre pour une longue période; j'ai même essayé de joindre le tout dans un seul fichier. Ce que j'ai est:
Application.ts
///<reference path="../typings/angular2/angular2.d.ts" />
import {Component,View,bootstrap,NgFor} from "angular2/angular2";
import {NameService} from "./services/NameService";
@Component({
selector:'my-app',
injectables: [NameService]
})
@View({
template:'<h1>Hi {{name}}</h1>' +
'<p>Friends</p>' +
'<ul>' +
' <li *ng-for="#name of names">{{name}}</li>' +
'</ul>',
directives:[NgFor]
})
class MyAppComponent
{
name:string;
names:Array<string>;
constructor(nameService:NameService)
{
this.name = 'Michal';
this.names = nameService.getNames();
}
}
bootstrap(MyAppComponent);
services/NameService.ts
export class NameService {
names: Array<string>;
constructor() {
this.names = ["Alice", "Aarav", "Martín", "Shannon", "Ariana", "Kai"];
}
getNames()
{
return this.names;
}
}
Je reçois un message d'erreur disant No provider for NameService
.
Quelqu'un peut-il m'aider à repérer le problème avec mon code?
- comme d'Alpha 42: @Composant({ fournisseurs: [NameService] })
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
providers
au lieu deinjectables
Exemple de code complet ici.
providers
fonctionne sur la dernière version bêta (bêta 0).bindings
Angulaire 2 il y a trois endroits où vous pouvez "fournir" des services:
"Le bootstrap fournisseur de l'option est conçu pour la configuration et l'impérieuse Angulaire propre préinscrits services, tels que sa prise en charge le routage." -- référence
Si vous souhaitez uniquement une instance de NameService l'ensemble de votre application (c'est à dire, Singleton), puis l'inclure dans le
providers
tableau de la racine de votre composante:Plunker
Si vous préférez une instance par composant, utilisez la
providers
tableau dans le composant de l'objet de configuration de la place:Voir le Hiérarchique Injecteurs doc pour plus d'info.
Comme Angulaire 2 Beta:
Ajouter
@Injectable
à votre service:et à votre composant config ajouter le
providers
comme:Vous devriez être en injectant
NameService
à l'intérieur deproviders
tableau de votreAppModule
'sNgModule
métadonnées.Si vous souhaitez créer une Dépendance pour les particuliers au niveau des composants, sans vous soucier de l'état de votre demande, vous pouvez injecter de cette dépendance sur la composante
providers
option de métadonnées comme acceptée @Klass réponse montré.DataManagerService
a@Injectable
décorateur sur elle?Vous devriez être en injectant NameService à l'intérieur de fournisseurs de tableau de votre AppModule de NgModule métadonnées.
et être sûr de les importer dans votre composant du même nom (sensible à la casse),parce que SystemJs est sensible à la casse (par conception). Si vous utilisez différents nom de chemin d'accès des fichiers de votre projet comme ceci:
principal.le module.ts
votre composant.ts
ensuite, le Système js fera double importations
Angulaire v2 et c'est maintenant:
@Component({
selector:'my-app',
providers: [NameService],
template: ...
})
Scandaleusement, la syntaxe a changé encore dans la dernière version du Angulaire 🙂 De la Angulaire 6 docs:
src/app/utilisateur.service.0.ts
Angulaire 2 a changé, voici ce que le haut de votre code devrait ressembler à:
Aussi, vous souhaitez peut-être utiliser les accesseurs et mutateurs à votre service:
Puis dans votre application, vous pouvez tout simplement faire:
Je vous suggère d'aller à plnkr.de co et de créer un nouveau Angulaire 2 (ES6) plunk et le faire fonctionner dans le premier. Il va mettre tout en place pour vous. Une fois que c'est de travailler, de le copier sur votre autre environnement et de triage des problèmes avec l'environnement.
L'erreur
No provider for NameService
est un problème commun que beaucoup de Angular2 débutants visage.Raison: Avant d'utiliser un service personnalisé, vous devez d'abord l'enregistrer avec NgModule en l'ajoutant à la liste des fournisseurs de:
Solution:
Vous pourriez aussi avoir les dépendances déclarées dans le fichier d'amorce-commande de ce type:
Au moins, c'est ce qui a fonctionné pour moi dans alpha40.
c'est le lien: http://www.syntaxsuccess.com/viewarticle/dependency-injection-in-angular-2.0
Salut , Vous pouvez l'utiliser dans vos .ts fichier :
d'abord importer votre service dans ce .ts fichier:
Puis, dans le même fichier, vous pouvez ajouter
providers: [Your_Service_Name]
:Ajouter à fournisseurs de pas injectables
Vous devez l'ajouter à des fournisseurs de tableau, ce qui inclut tous les depency sur votre composant.
Oeil à cette section angulaire de la documentation:
Donc dans votre cas, il suffit de changer les injectables pour les fournisseurs comme ci-dessous:
Également dans les nouvelles versions de Anguleuses, @Vue et quelques autres choses disparu.
Pour plus d'info ,visitez ici.
Angular2 vous oblige à déclarer toutes les injectables dans le bootstrap de l'appel de fonction. Sans cela, votre service n'est pas un produit injectable objet.
providers
tableau dans le composant de l'objet de configuration. Si il est inclus dans leproviders
tableau, nous obtenons un exemple lié par composant. Voir le Hiérarchique Injecteurs la doc pour plus d'info.Ajouter @Injectable à votre service:
et dans votre composant ajoutez les fournisseurs:
ou si vous souhaitez accéder à votre service partout dans l'application, vous pouvez passer d'un fournisseur d'application
ajouter à votre service pour les fournisseurs de tableau[] dans l'app.le module.fichier ts.
Comme ci-dessous
//ici, mon service est CarService
app.le module.ts
Angulaire vous pouvez vous inscrire à un service de deux façons:
1. Registre de service dans le module ou composant racine
Effets:
Vous devez prendre soin de si vous vous inscrivez à un service dans un paresseux chargé du module:
Le service est disponible uniquement dans les composants déclarés dans le module
Le service sera disponible sur la durée de vie de l'application uniquement lorsque le module est chargé
2. S'inscrire à un service en tout autre composant de l'application
Effets:
Vous devez prendre soin de si vous vous inscrivez à un service en tout autre composant de l'application
L'instance de l'injection de service sera disponible uniquement dans le composant et tous ses enfants.
L'instance sera disponible sur la durée de vie du composant.
Enregistrement des fournisseurs dans un composant
Voici une version révisée de HeroesComponent que les registres de la HeroService à ses fournisseurs de tableau.