2016-07-14 123 views
0

我有一個UserService其中包含如下一些靜態方法:如下所示無法注入服務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; 
    } 
} 

我注入它在boot.ts:

bootstrap(AppComponent, [ UserInfoService]) 

我在另一個組件使用此服務如下:

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(); 
    } 
} 

這NavigationComponent調用無法訪問UserInfoService。 注意:這與angular2-rc1一起工作。升級到rc4後,我遇到了這個問題。 請幫忙。

+0

你必須注入''裏面constructor' UserInfoService'得到它的實例.. –

回答

1

我看不到你想要通過注入只有靜態方法和變量的服務來實現什麼。

我建議使用像一個單獨的服務,而不是,所以注射它實際上有一定道理:

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; 
    } 
} 

而在你的組件:

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

我用靜態方法,使我沒有在構造函數來創建實例它一直工作到rc1。但看起來事情已經改變了與rc4這是從工作中斷這一點。無論如何,我將在構造函數中創建實例並使用它。謝謝 – Krishna

+0

如果它完全是靜態的,則不需要注入它。 – rinukkusu

+0

這意味着我不需要使用@Injectable,我不需要在bootstrap('appComponent',[])中提供? – Krishna

2

只是做的比如你服務,如果你想在任何組件使用它...

在您的構造函數使userinfoservice實例爲:

constructor(private userInfoService:UserInfoService) { 

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

就是這樣,它的工作原理與它的罰款:)