2016-07-14 14 views
0

Ich habe eine Userservice, die enthält einige statische Methoden wie unten einzuspritzen:Dienst kann nicht angular2-RC4

import {Injectable} from '@angular/core'; 

@Injectable() 
export class UserInfoService { 
    private static _userInfo: any; 

    static put(userInfo:any) { 
     this._userInfo = userInfo; 
    } 
    static getRole() : string { 
     if (this._userInfo) { 
      return this._userInfo.role; 
     } 
     return ''; 
    } 
    static getUserInfo() : string { 
     return this._userInfo; 
    } 
} 

Ich Injizieren es in boot.ts wie unten gezeigt:

bootstrap(AppComponent, [ UserInfoService]) 

ich verwende diesen Dienst in einer anderen Komponente wie folgt:

import {Component} from '@angular/core'; 
import {UserInfoService} from "../service/user.info"; 

@Component({ 
    selector: 'nav-bar', 
    templateUrl: 'template/navbar.html' 
}); 
export class NavigationComponent { 
    constructor() { 
     this.userInfo = UserInfoService.getUserInfo(); 
    } 
} 

Diese NavigationComponent ruft den Zugriff nicht in der Lage ist BenutzerInfoService. Hinweis: Dies funktionierte mit angular2-rc1. Ich stehe nach dem Upgrade auf rc4 vor diesem Problem. Bitte helfen.

+0

Sie injizieren müssen 'UserInfoService' innen' constructor' seine Instanz zu erhalten .. –

Antwort

1

Ich kann nicht sehen, was Sie erreichen möchten, indem Sie einen Service injizieren, der nur statische Methoden und Variablen hat.

Ich würde vorschlagen, den Dienst wie ein Singleton stattdessen verwenden, so dass es tatsächlich die Injektion einen Sinn macht:

import {Injectable} from '@angular/core'; 

@Injectable() 
export class UserInfoService { 
    private _userInfo: any; 

    put(userInfo:any) { 
     this._userInfo = userInfo; 
    } 
    getRole() : string { 
     if (this._userInfo) { 
      return this._userInfo.role; 
     } 
     return ''; 
    } 
    getUserInfo() : string { 
     return this._userInfo; 
    } 
} 

Und in Ihrer Komponente:

import {Component} from '@angular/core'; 
import {UserInfoService} from "../service/user.info"; 

@Component({ 
    selector: 'nav-bar', 
    templateUrl: 'template/navbar.html' 
}); 
export class NavigationComponent { 
    userInfo: string; 

    constructor(private _userInfoService: UserInfoService) { 
     this.userInfo = _userInfoService.getUserInfo(); 
    } 
} 
+0

ich statische Methoden verwendet, so dass ich erstellen Instanz in Konstruktor nicht und es funktionierte bis rc1. Aber es sieht so aus, als ob sich etwas mit rc4 geändert hat, was das vom Arbeiten abhält. Wie auch immer, ich werde eine Instanz im Konstruktor erstellen und sie verwenden. Danke – Krishna

+0

Wenn es vollständig statisch ist, müssen Sie es nicht injizieren. – rinukkusu

+0

Das bedeutet, ich brauche nicht @Injectable verwenden und ich muss nicht Bootstrap geben ('appComponent', []) ?? – Krishna

2

nur eine Instanz macht Ihre Service, wenn Sie es in einer Ihrer Komponenten verwenden möchten ....

In Ihrem Konstruktor make userinfoservice Instanz wie:

constructor(private userInfoService:UserInfoService) { 

    //......now you can use your functions by 
    userInfoService.getUserInfo() 
} 

, die es ist, es funktioniert gut mit ihm :)