2016-11-07 7 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 

EDIT:

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

AppModuleのプロバイダにUserServiceのを入れて、@Injectable

+0

** UserService **は@Injectable()を持ち、** user.module.ts **を使用して提供する必要があります。 ** AppModule **のプロバイダに** UserService **を置いても、それは役に立ちません。 – Oudstand

+0

UserServiceにGlobalsServiceを注入する理由は何ですか?相互参照を作成しています。共有モジュールを作成し、UserModule、AppModule、またはいつでもこのモジュールを含めることができます。 –

+0

これを実行すると、** UserService **内の** GlobalsService **にはどのようにアクセスできますか? – Oudstand

関連する問題