L'injection de http dans un service donne “Pas de fournisseur pour Http!” erreur

Angulaire version: 2.0.0-bêta.13

Je suis en train d'injecter http dans un service:

@Injectable()
export class GithubService {
    ...
    constructor(private http: Http) {
    }
}

J'ai énuméré HTTP_PROVIDERS en tant que fournisseur dans le composant racine de mon application, de sorte que ce fournisseur devrait être disponible à n'importe quelle composante de ma demande:

@Component({
  providers: [HTTP_PROVIDERS],
})
export class AppComponent {}

Cependant quand je lance cette application, j'obtiens l'erreur suivante:

EXCEPTION: Erreur: Uncaught (promettre): Pas de fournisseur pour Http! (HttpReqComponent -> GithubService -> Http)

Ce que je fais mal?

Modifier

J'ai changé providers à viewProviders et l'erreur a disparu!

@Component({
  viewProviders: [HTTP_PROVIDERS],
})
export class AppComponent {}

Cependant, je ne peux pas expliquer pourquoi cela fonctionne. http n'est pas accessible par tout afficher directement. Il n'est accessible qu'à l'intérieur de GithubService. Alors, pourquoi dois-je déclarer HTTP_PROVIDERS comme un viewProvider?

Edit 2

Bien, j'ai déplacé les providers déclaration de AppComponent jusqu'à la composante où j'en ai besoin et maintenant ça fonctionne! Donc il doit y avoir quelque chose pour eux, en déclarant au niveau de la racine.

@Component({
    providers: [HTTP_PROVIDERS, GithubService],
})
export class HttpReqComponent { }

En fait, les deux providers et viewProviders œuvres. S'avère que viewProviders est en fait plus restrictives et offre une meilleure encapsulation du composant. Voir cet article pour plus de détails.

  • Vous n'avez pas besoin viewProvider, en fait, je recherche pour elle et n'ai pas trouvé de référence, mais je l'ai testé et il fonctionne avec fournisseurs et avec viewProviders . Si vous n'êtes toujours pas sûr de créer un plunker code de l'application pour voir exactement.
  • C'est vraiment étrange parce qu'il doit travailler. Voir ce plunkr: plnkr.co/modifier/gG84YnQPItRSf0tIJSMK?p=preview. Je serais intéressé à en savoir plus au sujet de votre environnement 😉 Merci!
InformationsquelleAutor Naresh | 2016-04-06