2016-11-07 4 views
0

私は、Httpサービスをインジェクションして他のコンポーネントで使用しているAngular 2サービスを定義しましたが、正しく行ったとは思わない:DIの角2.1.2 ES5サービスが正しく定義されています

(function (app) { 
'use strict'; 
app.LoaderService = ng.core.Component({ 
    providers: [ng.http.Http], 
    // TODO We shouldn't need to define a template in a service. Maybe service shouldn't be a Component? 
    template: '' 
    }).Class({ 
    constructor: [ng.http.Http, function (http) { 
     this.http = http; 
    }], 
    getData: function (url, target) { 
     var getter = this.http.get(url); 
     getter.subscribe(function (result) { 
      target.data = result.json(); 
     }); 
    } 
    }); 
})(window.app || (window.app = {})); 

これは私が「テンプレート」を定義するために「ng.core.Component」の力を使って、働く一方で、そうでない場合、私は「いいえ、テンプレート指定した」エラーを取得していないが、それは本当にただのサービスだが、それは必要はありませんテンプレート。

私はこの質問のように 'ng.core.Injectable()クラス(...)。' を使用してそれを定義しようとした:

create an angular 2 service in es5

が、それはエラー「与えng.core.Injectable (...)クラスは関数ではありません '。答えが書かれてからAngularが変わったのでしょうか?

単純な関数としてサービスを書く例もたくさんありますが、それでHttpサービスを注入することはできません。

純粋なJavascriptでサービスを定義して、Httpを注入してコンポーネントに注入できるようにするにはどうすればよいですか?

答えて

1

はい、もうClassプロパティはありません。

TypeDecorator.annotations = chainAnnotation; 
TypeDecorator.Class = Class; 
if (chainFn) chainFn(TypeDecorator); 
return TypeDecorator; 

https://github.com/angular/angular/blob/2.0.0-beta.5/modules/angular2/src/core/util/decorators.ts#L247-L267

あなたは自分のサービスにng.core.Classを使用することができます今日:NG2ベータ-5から

ソースコードは次のようになります。ここでチートシート

だし、ここにPlunker Example

です
関連する問題