2016-04-07 11 views
1

私は、異なる角度2のアプリケーション間で共有できるサービスを作る必要があります。このサービスは、残りのAPIにアクセスし、角度アプリケーションで使用できるようにデータをラップします。私がangular2のHTTPサービスを使用している場合、私はサービスの依存としてangular2全体を持つ必要があります。angular2はhttpサービス層を共有します

現在、私は複数のプロジェクト間で再利用できるように、サービス層を分離されたnpmパッケージとして提供したいと考えています。

再利用性を実現し、angular2ライブラリ全体をサービスパッケージにインストールしない方が良いでしょうか?

+0

したがって、サービスには親パッケージ(プロジェクト)と共有される 'angular' npm依存関係があります。その問題は何ですか?当然のことながら、プロジェクトをdistにコンパイルして、プロジェクトと同じ「角度」を使用できるようにするべきではありません。このサービスは角度以外の環境での使用を意図したものではないので、それほど単純ではありません。 – estus

+0

@estusサービスは別のパッケージです。だから私は可能な場合は、全体のangle2ではなく、httpを使用できるようにしたい。もちろん、ng2全体をインストールすることができ、プロジェクトがng2であるため、一度だけインストールされます。 –

+0

しかし、サービスは、アプリケーションによってホストされている、右か?その後、注入された 'Http'はアプリのインジェクタから送られます。サービスパッケージは、npmの 'angular'依存性を持っている必要はありません(サービスパッケージ内の 'angular2/http'から 'import ... from'はプロジェクトパッケージと同じ' angular2/http'に解決されるでしょう、それはnpmパッケージの動作方法です)。問題は現在の状態ではあいまいであり、実際のコードが不足していますが、ここに問題はないようです。 – estus

答えて

1
  • あなたはAngulars HTTPを使用する必要はありません。 XMLHttpRequestを呼び出す独自のクラスを構築するか、fetch APIを直接使用するか、AJAX要求を行う他のライブラリを使用します。

  • 角度がhttps://github.com/angular/http(作業中)(Angular2メインレポの外に)それ自身のパッケージには、HTTPを移動しようとしている

  • あなたはの公開APIに合わせ、あなたのHTTPサービス層のインターフェイスを作成することができますHttpクラスを作成し、AngularアプリケーションをブートストラップするときにHttpインスタンスをサービスに渡します。お使いのコンポーネントやサービスで、その後

interface MyHttp { 
    get(url: string, options?: RequestOptionsArgs): Observable<Response>; 
    ... 
} 

let myHttpService = new MyHttpService(); 

bootstrap(AppComponent1, [ 
    HTTP_PROVIDERS, 
    provide(MyHttpService, { 
     deps: [Http], 
     useFactory: (http) => { 
      if(!myHttpService.http) { 
      myService.http = http; 
      } 
      return myService; 
     }) 
    })] 
); 

export class MyComponent { 
    constructor(private _myHttp: MyHttpService) { 
    this._myHttp.doSomething(); 
    } 
} 

ヒントのようにそれを使用する:あなたはまた、外のコンポーネントとサービスへHttpの交換(としてあなたMyHttpServiceを注入する場合あなたのコントロールHttpあなたのMyHttpServiceを使用する要求)は、プロバイダは異なって見える必要があります。

+0

angular2 http repoによると、そのステータスは非アクティブです。私はあなた自身のサービスを使用できることを理解しています。しかし、angular2は、すべてを一緒にテストし、テストするためのインフラを持っています。そして、angular2は、httpのようなangular2サービスで構築されます。ですから、angular2を使って独自の方法を使用することは、あなたが角度的なやり方をしていると仮定したフレームワークとしては奇妙です。私は何が欠けていますか? –

関連する問題