2017-06-05 3 views
6

私は2つのサービス、loginServiceとUserserviceを持ち、LoginserviceにUserserviceを注入しようとしていて、アプリケーションは実行されません。 UserServiceのアングル2はサービスのすべてのパラメータを解決できません

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

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

と::これは私のloginserviceある

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]

コンソールで

、私はエラーを持っている

@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にはLoginServiceが必要です。LoginServiceには、UserServiceが必要です。

いずれかの依存関係を削除します。例えば。あなたのUserServiceをリファクタリングして、LoginServiceへの参照を必要としないようにしてください。

+0

を作成しましたが、その解決策は何ですか? –

+0

依存関係の1つを削除します。例えば。 LoginServiceへの参照を必要としないようにUserServiceをリファクタリングしてください – Steveland83

+0

これは1つの解決策ですか? –

2

他の投稿には循環依存性が記載されています... forwardRef()を使用してこの問題を解決することを検討してください。

簡単に言えば、実際のサービスの代わりに前方参照を挿入することができます。したがって、サービスインジェクションは延期されます。したがって、循環依存性は解決される。ここで

は、コードサンプルです:

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

関連する問題