2016-11-07 107 views
0

我正嘗試使用服務來存儲全局使用的信息。目前它應該包含當前用戶。無法解析GlobalsService的所有參數:(?)

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

import {User} from "../user/user"; 

@Injectable() 
export class GlobalsService { 
    private currentUser: User = null;  

    constructor(private userService: UserService) { 
     this.userService.getCurrentUser().subscribe(user => this.currentUser = user); 
    } 
} 

這是我app.module.ts

import {NgModule} from "@angular/core"; 
import {BrowserModule} from '@angular/platform-browser'; 
import {HttpModule} from '@angular/http'; 
import {routing} from "./app.routing"; 

import {AppComponent} from './app.component'; 
import {UserModule} from "./user/user.module"; 

import {CanActivateViaOAuthGuard} from "./auth/oAuth.canActivateGuard"; 

import {GlobalsService} from './globals/globals.service'; 


@NgModule({ 
    imports: [BrowserModule, HttpModule, routing, UserModule], 
    declarations: [AppComponent], 
    bootstrap: [AppComponent], 
    providers: [GlobalsService, CanActivateViaOAuthGuard] 
}) 

export class AppModule { 
} 

現在我得到這個錯誤:

Unhandled Promise rejection: (SystemJS) Can't resolve all parameters for GlobalsService: (?). 
    Error: Can't resolve all parameters for GlobalsService: (?). 
     at CompileMetadataResolver.getDependenciesMetadata 

編輯:

的UserService由user.module.ts提供:

import {NgModule} from "@angular/core"; 
import {UserComponent} from "./user.component"; 
import {CommonModule} from "@angular/common"; 
import {UserService} from './user.service'; 

@NgModule({ 
    providers:[UserService], 
    imports: [CommonModule], 
    declarations: [UserComponent], 
    exports: [UserComponent] 
}) 

export class UserModule{} 

如果我從GlobalsService的構造函數中刪除UserService,錯誤消失。

的UserService:

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

import {AuthHttp} from "../auth/authHttp.service"; 
import {Observable} from "rxjs"; 
import {User} from "./user"; 
import {GlobalsService} from "../globals/globals.service"; 

@Injectable() 
export class UserService { 
    private url: string = this.globals.getServerUrl() + 'users'; 

    constructor(private http: AuthHttp, private globals: GlobalsService) { 
    } 

    getUsers(): Observable<User[]> { 
     return this.http.get(this.url); 
    } 

    getCurrentUser(): Observable<User> { 
     return this.http.get(this.url + '/me'); 
    } 
} 
+1

註釋它哪裏是它應該是從獲得'UserService'? 'UserModule'?它是否正確導出?你能給更多[mcve]嗎? – jonrsharpe

+0

@jonrsharpe我編輯了這篇文章。我希望這是你的意思? – Oudstand

回答

2

UserService的AppModule的提供者和@Injectable

+0

** UserService **擁有@Injectable(),並且應該通過** user.module.ts **提供。 另外,如果我把** UserService **放在** AppModule **的提供程序中,它沒有任何幫助。 – Oudstand

+0

爲什麼你要在UserService中注入GlobalsService?您正在創建交叉引用。創建共享模塊並在其中包含GlobalService,該模塊可以在UserModule,AppModule或任何時候提供 –

+0

當我這樣做時,如何訪問** UserService **中的** GlobalsService **? – Oudstand

相關問題