2017-06-05 62 views
6

我有兩個服務:loginService和Userservice,並嘗試將Userservice注入到Loginservice中,並且該應用程序無法運行。angular 2無法解析服務的所有參數

在控制檯

,我有錯誤:

Error: Can't resolve all parameters for UserService: ([object Object], ?). at SyntaxError.ZoneAwareError (http://localhost:4200/polyfills.bundle.js:7156:33) at SyntaxError.BaseError [as constructor]

這是我的login服務:

import {UserService} from '../services/user.service'; 
@Injectable() 
export class LoginService { 

    constructor(public _http: Http,public us:UserService) { 
    } 

和userService:

@Injectable() 
    export class UserService { 
    constructor(private _http: Http , public _ls: LoginService) { 

    } 

角度模塊:

import {LoginService } from './services/login.service'; 
import {UserService} from './services/user.service'; 

@NgModule({ 
    declarations: [ 
    AppComponent, 


    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule, 

    ], 
    exports: [BrowserModule, SlimLoadingBarModule], 
    providers: [UserService, LoginService , appRoutingProviders ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 
+0

請添加角度模塊和你的'UserService'代碼。 – n00dl3

+0

您剛剛創建了一個循環依賴關係 –

回答

20

您有循環參考。

您的UserService要求LoginServiceLoginService要求UserService

刪除其中一個依賴關係。例如。重構您的UserService,以便它不需要引用LoginService

+0

,解決方案是什麼? –

+0

刪除其中一個依賴關係。例如。重構您的UserService,以便它不需要引用LoginService – Steveland83

+0

這是一種可能的解決方案? –

2

由於其他發佈提到了循環依賴...您可以考慮使用forwardRef()來解決此問題。

簡而言之,我們可以注入一個Forward Reference而不是真正的服務。所以服務注入將被延遲。因此,循環依賴被解決。

下面是一個代碼示例:

import {Component, Inject, forwardRef} from '@angular/core'; 

@Component({ 
    selector: 'my-app', 
    template: '<h1>Favourite framework: {{ name }}</h1>' 
}) 
class AppComponent { 
    name: string; 

    constructor(@Inject(forwardRef(() => NameService)) nameService) { 
    this.name = nameService.getName(); 
    } 
} 

class NameService { 
    getName() { 
    return "Angular"; 
    } 
} 

您可以檢查this page進一步的細節。

+0

你可以在你的問題中包含論壇帖子的必要部分嗎?它總是建議包括實際的答案,而不是指一個鏈接 – Ibo

+0

我認爲它應該是更像這樣的:'構造函數(@Inject(forwardRef(()=> NameService))nameService:NameService){this.name = nameService.getName(); }' – Robert

相關問題