2017-03-22 19 views
0

私は以下のように定義されたサービスを持っています。Angular2コンポーネントがコンストラクタでサービスを受け取ることができません

import { Injectable } from "@angular/core"; 
import { Http } from "@angular/http"; 

@Injectable() 
export class SirService { 
    constructor(private http: Http) { 
    console.log("The http is: " + http); 
    } 

    stuff() { return ["uno", "duo", "tress"]; } 
} 

次に、私のコンポーネントのプロバイダをこのようなサービスに設定します。

import { Component } from "@angular/core"; 
import { SirService } from "../app.service"; 

@Component({ 
    selector: "demo", 
    providers: [SirService], 
    template: require("./demo.html"), 
    styles: [require("./common.scss")] 
}) 
export class Demo { 
    // constructor() { 
    constructor(private service: SirService) { 
    console.log("Service: " + service); 
    } 
} 

でも、私は、サービスにstuff()コールにアクセスする方法を不確実です。上記のことは、Angularが私のコンストラクタにプッシュする意味のあるものを見つけることができなかったというエラーを生成します。パラメータのないコンストラクタを使用すると、私はそのサービスへの参照がありません。モジュールの代わりにコンポーネントのためにこれを行う方法を示すいくつかの例があるようです...(私は愚かにグーグルであるかもしれません...)

エラーメッセージは膨大ですが、これは最もです関連する部分(私が知る限り)。

未処理プロミス拒否:Http! ;ゾーン:角度;タスク:Promise.then;値:

+1

@NgModule({ // ... imports: [BrowserModule, ..., HttpModule] }) export class AppModule {} 

詳しい説明を。完全で正確なエラー。 –

+0

@JBNizet私はこのようなエラーについては尋ねていませんでした。なぜなら、私はリソースと比較すると構文が正しいと思われているからですが、私はそれが使用に同意するでしょう。 5分で編集をご覧ください。ポインタありがとう。 –

+0

@JBNizetが掲載されています。それは完全なコンテンツが表示するには大きすぎますが、編集は興味深い部分を示しています。 –

答えて

1

エラーは、問題があなたのサービスではないことを意味し

No provider for Http 

です。問題は、サービスがHttpサービスを使用する必要があり、このサービスが存在しないことです。

あなたはこのサービスを提供していHttpModuleを、インポートする必要があります:あなたがエラーを投稿し、エラーについて尋ねるthe documentation

+0

Aha!だから、 'HttpModule'を知っている唯一のサービスクラスとコンポーネントにコンパイルする方法はありません。私は私のモジュールのデコレータのインポートセクションにそれを置く必要がありますか?結局のところ、私はそれをサービス輸入品に輸入しました(2行目)。 –

+0

はい。完全にステートレスであるため、サービスはルートモジュールによって提供される可能性があります。つまり、コンポーネントのインスタンスごとに新しいインスタンスを作成することは本当にありません。あなたはこのコンポーネントとこのサービスのためのサブモジュールを作ることができますが、私は実際にその点を見ません。とにかくどこでもHttpを使用します。 –

+0

興味深い点。私はそれを得る。私は何が働いているのか、何がないのか、そして最も重要なのはなぜ、そうではないのかを見るために、さまざまなアプローチで作業しようとしました。 –

関連する問題