2016-05-05 3 views
3

自分で作成したサービス& angular2のHttpサービスを自分のカスタムHttpRestサービスに挿入しようとしています。サービスに複数のサービスを挿入する - angular2

@Inject(Http) public _http: Http 

を使用して

はうまく働いたが、私は、私はエラー、次の取得別の自作のサービスを注入しようとすると:何らかの理由で ユーザIDを

EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http @Inject(Http), undefined @Inject(undefined)). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable. 

を輸入であっても、定義されていません成功した。 マイカスタムサービス:

@Injectable() 
export class HttpRest{ 
    groups; 
    constructor(
     @Inject(Http) public _http: Http, 
     @Inject(UserIds) public _ids: UserIds 
    ){} 
... 
} 

注:に両方のHttp &ユーザIDを注入

@Injectable() 
export class UserIds{ 
    private _signature_id:string; 
    private _role_id:number; 
    get signature_id():string{ 
     return this._signature_id; 
    } 
    set signature_id(id:string){ 
     this._signature_id = id; 
    } 
    get role_id():number{ 
     return this._role_id; 
    } 
    set role_id(id:number){ 
     this._role_id = id; 
    } 
} 

カスタムHttpRestサービスイム!削除したとき

, 
@Inject(UserIds) public _ids: UserIds 

私はエラーを表示しません。
私は何が欠けていますか?

UPDATE 問題は、ユーザーIDを理解しようとイムいくつかの未知の理由のためにコンストラクタのparamsで定義されていないことを実際にあるので、この質問のタイトルは無関係になります。それは "インポートされたサービスはコンストラクタparamsで定義されていません"である必要があります。
この質問の下で私の答えにこの投稿をさらに詳しくお聞かせください。

更新日:
この問題について説明する質問にお答えください。 Using index.ts file to export class causes undefined in injected constructor

答えて

0

あなたは(main.ts)または階層の最上位レベルであるapp.component.ts、中にルートレベルであなたのUserIdsサービスを登録する必要があります。@Inject(Http) public _http: Http

@Component({ 
    selector: 'my-app', 
    template: '<h1>My First Angular 2 App</h1>', 
    providers: [ UserIds ] 
}) 
export class AppComponent { } 
+0

私は結果なしでそれをしました。 @Component({ セレクタ: "... " templateUrl:" ..."、 ディレクティブ:[ ROUTER_DIRECTIVES]、 プロバイダ:[ ROUTER_PROVIDERS、 HttpRest、 ユーザID、 は、(LocationStrategyを提供} – wagwanJahMan

1

@Inject(...)は時に冗長ですパラメータ@Inject()は、パラメータのタイプと同じです。

@Injectable() 
export class HttpRest{ 
    groups; 
    constructor(public _http: Http, public _ids: UserIds 
    ){} 
... 
} 

あなたはHttpUserIdsを提供する必要があるので、DIは、依存関係を解決することができます。 HttpHTTP_PROVIDERS

@Component({ 
    selector: '...', 
    providers: [HTTP_PROVIDERS, UserIds], 
    template: ... 
}) 
export class AppComponent { 

} 

に含まれていますが、すべてが正しく

import {HTTP_PROVIDERS, Http} from 'angular2/http'; 
+0

問題は実際には理解しようとしている何らかの未知の理由によりUserIdsがコンストラクタparamsで未定義であるため、この質問のタイトルは無関係になります。それは "インポートされたサービスはコンストラクタparamsで定義されていません"である必要があります。 これは、インポートされたクラスをメンバーに保存すると、コンストラクターの実行コンテキストで割り当てられたクラスを見ることができます。 – wagwanJahMan

+0

あなたはすべてのクラスを自分のファイルに持っていますか?さらに同じファイルにあるクラス名を使用すると、それは機能しません。クラスは吊り上げられません。そうしないと、インポートが壊れます。そうでなければ、再現を可能にするPlunker(テンプレートhttps://plnkr.co/edit/KZu83k?p=info)を持たせることは役に立ちます。 –

+1

クラスは、1つのクラスをエクスポートする独自のファイルにあります。 しかし、私は問題を示すためのプランナーを作成し、それを新しい質問として投稿します。私はこの質問へのリンクでこのポストを更新します。 今のところ、この問題のタイトルは無関係なので、メインの質問に更新コメントを追加しています。 – wagwanJahMan

1

[OK]をインポートしていることを確認ので、私は問題を発見し、それを注入するとやっていません。 問題は、アングル2のスタイルガイド(https://github.com/mgechev/angular2-style-guide/blob/master/old/README.md#directory-structure)で説明したように、インデックスファイルを使用してサービスをエクスポートしていて、インデックスからこの特定のサービスをインポートすると、コンストラクタに注入するときに未定義の値が発生することです。 何か理由がわからないので、インデックスファイルを使わずに直接ソースを再入力すると、エラーが解決されました。

輸入修正プログラムはこのように見えたの前に:他のすべてのサービスおよびコンポーネントと協力

import {UserIds} from "../index"; 

直接ソースファイルを使用してインポート:

import {UserIds} from "../user_ids/user_ids.service"; 

これは私の問題を解決し、いくつかの理由が、私はindex.tsカプセル化と一致滞在したいです。

なぜこのようなことが起きるか考えている人は、私は更新がうれしいです。

+0

私はちょうど同じ問題に遭遇しました。ソリューションに感謝しますが、私はまた、問題が何かを疑問に思っています。クラスを直接参照したくないのですが、代わりにバレルを構築しています.... – Spock

関連する問題