9
votes

Comment injecter un service personnalisé dans un autre service personnalisé?

Je reçois un Aucun fournisseur de Firebaservice ERREUR Même après la démarrage du Firebaservice dans le BOOTSTRAP (App, [fournisseurs]) Méthode .

J'ai suivi Pascal Guide d'injecter un service dans un service et cela a fonctionné lorsque j'ai injecté le service http avec le http_providers bootstrapped, mais je reçois un aucun fournisseur de Firebaservice Erreur après la modification de mon propre service.

Je peux injecter les deux fournisseurs individuellement en supprimant l'injection du Firebaservice . Même si je fais rétroducteur (@Inject (Firebaservice) Firebase: Firebaservice) {} Cela ne fonctionnera pas, mais ma compréhension est que l'ajout du décorateur @Ijejejej.j. / code> doit avoir le même effet.

login-page.ts xxx

main.ts < / p> xxx

userservice xxx

Firebaservice < Pré> xxx


1 commentaires

Pour référence, le référentiel complet est ici: Github.com/chuckknorris/ng2rct


3 Réponses :


0
votes

Vous n'ate pas userservice code> dans main.ts code>. Essayez d'ajouter cela aussi:

import { bootstrap }    from '@angular/platform-browser-dynamic';
import { PLATFORM_DIRECTIVES, provide } from '@angular/core';
import { AppComponent } from './app.component';
import { ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router';
import { UxButton, UxText } from './export';
import { FirebaseService } from './SERVICES/firebase.service';
import { UserService } from './SERVICES/user.service';

bootstrap(AppComponent, [
     FirebaseService,
     UserService     //<-- add this
    ,ROUTER_DIRECTIVES 
    ,ROUTER_PROVIDERS
    ,provide(PLATFORM_DIRECTIVES, {useValue: UxButton, multi: true})
    ,provide(PLATFORM_DIRECTIVES, {useValue: UxText, multi: true})
]);


1 commentaires

J'ai déjà essayé cela sans succès. Je ne veux pas d'instance singleton pour userservice, uniquement pour l'instance Firebase. Ce n'est jamais un problème auparavant.



4
votes

J'ai fait pluck et cela fonctionne et injecte le service Firebase au service des utilisateurs.

main.ts p> xxx pré>

app.ts p> xxx pré>

user.service.ts p>

import {Injectable} from '@angular/core'
@Injectable()
export class FirebaseService {

    public get(path: string): any {
      console.log(path);
    }

    public set(objectToSave: any) {
       console.log(objectToSave);
    }
}


3 commentaires

Je pense que cette réponse n'est plus valide à partir de l'angulaire2 RC6


@Paveleapehin C'est parce que cette réponse a été écrite avant l'introduction du concept de modules. La nouvelle façon de le faire est de simplement fournir les services nécessaires dans le module approprié (tel que le module racine) et une instance de service Singleton sera disponible dans toute l'application.


@Dyna, merci. Ce n'est pas si évident où regarder dans l'extrait de code relativement grand.



1
votes

Je viens d'apprendre que les chemins d'instruction d'importation sont sensibles à la casse.

J'ai eu importer {userservice} de '../../ services / user.service'; pendant que le répertoire était ../../ services / user.service < / code>.

Où est l'emoji facepalm?


1 commentaires

Mec, tu as sauvé ma journée. C'est tellement stupide, mon dossier était "Authentification", donc mon énoncé d'importation généré a été généré "../authentication/", tellement changé en "../authentication/" et tout a fonctionné. Peut-être que bonne solution est de ne pas mettre les capuchons dans les noms de fichiers et les noms de dossiers. Je suis un débutant apprenant les astuces