2017-10-02 6 views
0

私は共有モジュールをAngularJS 1.6.5で書いています。このモジュールは、複数のアプリケーションで使用されます。このモジュールには内部的にいくつかのサービスがあり、それはホストアプリケーションによってオーバーライドされなければなりません。これは、さまざまなホスト・システム間で異なるRESTエンドポイントの変更に対する許可認可の差異などの問題を処理するためです。共有モジュールでオーバーライドサービスを定義する方法

私は私の共有モジュールを最初に定義して、その後私のコードで同じ名前のサービスを定義することができますが、これは非常に汚いと感じています。特に、各アプリケーションに既にこのようなサービスが既に存在する場合は、別の名前の下に置いてください。

提案がありますか?

明確化:

だから私の共有モジュールは

class MyDirectiveController { 
 
    /*@ngInject*/ 
 
    constructor($element, entity) { 
 
    this.$element = $element; 
 
    this.entity = entity; 
 
    } 
 
    
 
    $onInit() { 
 
    this.entity.get(this.id) 
 
     .then((data) => this.dataSet = data); 
 
    } 
 
}

そして、共有モジュール内で、私はダミーを持つことになり、サービスを注入コントローラとのディレクティブを持っているかもしれませんサービス:

class Entity { 
 
    /*@ngInject*/ 
 
    constructor($q) { 
 
    this.$q = $q; 
 
    } 
 
    
 
    get() { 
 
    console.info('You must include your own override service for retrieving entity data'); 
 
    return this.$q.reject(); 
 
    } 
 
}

その後何とかモジュールの実体サービスへのオーバーライドとしての私の親のアプリサービスを渡す:

entity = MyAppEntityService;

答えて

0

サービス定義の順序のみ設定フェーズのために重要。実行フェーズでは、モジュールの階層が重要です(単一のモジュール内に同じサービスが複数定義されている場合を除く)。

共有モジュールはfooサービス、負荷がそのサービスをオーバーライドすることができるであろうモジュールがあることを考えるとこのパターンを避けるためにしようと

angular.module('app', ['shared']).factory('foo', ...); 
+0

を。上記の更新された質問をいくつかの文脈で見てください。 –

+0

私は参照してください。これはあなたが持っている場合のための完全に有効なパターンです。ダミーの実装でもエラーをスローすることができます。デコレータで既存のサービスを変更することはできますが、完全に置き換える必要があるため意味がありません。 – estus

関連する問題