1

2 つの .value レシピを含む構成モジュールを作成しています。

  • baseURL
  • baseURL の上にある多数の REST API URL

私は現在、これらを .value として設定していますが、同じように簡単に .constant にすることもできます

すべての API URL を書き直さなくても baseURL を変更できるようにしたいので、定義したばかりの baseURL を同じモジュールで参照する必要があります。

var configuration = angular.module('configuration', []); 

configuration.value('Config',{
    baseURL : 'http://dev.mysite.com/',     // define Base URL
});

configuration.value('ApiList', {
    getMyDataLink1 : this.baseURL + 'rest/folder1/action1/api_key/',
    getMyDataLink2 : this.baseURL + 'rest/folder2/action2/api_key/',
    getMyDataLink3 : this.baseURL + 'rest/folder3/action3/api_key/',
});

変数をテストすると:

  • Config.baseURL次のように正しく出力されますhttp://dev.mysite.com/
  • ApiList.getMyDataLink1部分が定義されていないため、半分しか定義されてthis.baseURLいません(つまり、出力しますundefinedrest/folder1/action1/api_key/

また、ApiList .value を次のように定義しようとしました。

getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/', 
//or
getMyDataLink1 : baseURL + 'rest/folder1/action1/api_key/', 

しかし、どちらも「Uncaught ReferenceError: XXXX is not defined」エラーが発生します...

同じモジュール内の別の .value から .value を参照することは可能ですか?

編集: http://jsfiddle.net/goredwards/yy5xuodh/を参照してください

EDIT2: http://jsfiddle.net/goredwards/xvj5xcgz/を参照してください。ここで、2 番目の .value を .factory に変換しました。次に、フィドルの下部にある js のみのメソッドと比較します。より簡潔な方法が必要です。これよりも!?

4

3 に答える 3

0

Gaurav が指摘したように、.value レシピに何かを注入することはできないように思われるので、(保守性の観点から) 私が見つけた最短かつ明確な方法は、連結 .value レシピ (つまり 2 番目のレシピ) を.factory レシピを作成し、'Config' .value 変数を挿入します。

var configuration = angular.module('configuration', []); 

configuration.value('Config',{
    baseURL : 'http://dev.mysite.com/',     // define Base URL
});

configuration.factory('ApiList', ['Config', function(Config){
    return{
        getMyDataLink1 : Config.baseURL + 'rest/folder1/action1/api_key/',
        getMyDataLink2 : Config.baseURL + 'rest/folder2/action2/api_key/',
        getMyDataLink3 : Config.baseURL + 'rest/folder3/action3/api_key/'
    };
}]);

これは機能しますが ( http://jsfiddle.net/goredwards/xvj5xcgz/を参照)、比較的簡潔で明確ですが、.values を単純に他の .values に連結できないのは奇妙に思えます...

于 2014-12-05T05:23:18.370 に答える