Bonjour,

Voila je rencontre un petit problème avec mon code.

Je voudrais charger un service dans un autre service. Je m'explique j'ai un service pour me connecter "user.service" et un service pour gérer les différents accès à mon application "access.service".

Quand je me connecte mon "user.service" renvoie l'utilisateur connecté et emmet un flus de donnée grace a l' EventEmitter
"user.service"

import { Injectable, EventEmitter } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

import { Utilisateur } from '../../Class/utilisateur/utilisateur';

@Injectable()
export class UserService {

    userObserver = new EventEmitter();

    constructor(private http: Http) {
    }

    connectUser(){
        return this.http.get("/app/Services/Mocks/users.mock.json").map(res => {
            let response = <Utilisateur> res.json();
            this.userObserver.emit(response);
            return response;
        });
    }

}

Côté "access.service" je voudrais m'abonné a ce flus pour mettre en mémoire cette utilisateur connecté dans mon service. c'est un service singleton donc une fois chargé je peux l'utilisater a travers mon application avec une persistance des données.
Pour éviter de lui envoyé directement l'utilisateur ou le lire dans le localstorage par exemple je voudrais m'abonner au flus de l' EventEmitter directement depuis ce second service.

import { Injectable } from '@angular/core';
import { UserService } from '../Business/user.service';

@Injectable()
export class AccessService {

  constructor(_userService : UserService) {
     this._userService.userObserver.subscribe(res => {
        console.log(res);
     });
  }

}

Property '_userService' does not exist on type 'AccessService'.at line 10 col 11around
Problème dans mon constructor apparament this._userService n'existe pas alors que je le déclare en paramètre du constructor je ne comprend pas vraiment.

Y a t'il une faisont spécifique pour charger un service tièrce dans un autre ?
Merci pour votre aide

2 réponses


Tu as deux moyens d'ecrire le code

export class AccessService {
  private _userService: UserService;

  constructor(_userService : UserService) {
    this._userService = _userService;
     this._userService.userObserver.subscribe(res => {
        console.log(res);
     });
  }
}

ou

export class AccessService {
  constructor(private _userService : UserService) {
     this._userService.userObserver.subscribe(res => {
        console.log(res);
     });
  }
}

Les deux font la meme chose. Personellement je prefere la deuxieme syntaxe, plus courte.

J'ai justement écris la même

constructor(_userService : UserService) {
     this._userService.userObserver.subscribe(res => {
        console.log(res);
     });
  }

La seul différence c'est que je n'ai pas déclaré le private mais il est implicite pas besoin . Avec ou ta synthaxe j'ai pas de changement.
Le this._userService dans le constructor reste undefined . D'ailleurs la console Typescript de Atom me le dit, tous comme la console Angular-Cli et chrome donc je pense que y'a un problème de synthaxe mais même avec ta version ça change rien

je suis séptique la lol