私は現時点でAngularJSの周りに自分のやり方を学んでいます。私は主にAngularが依存性注入を処理する方法を把握していますが、答えが見つからないギャップがあります。AngularJSでプリミティブ型を注入する
私は、ユーザーのクエリに基づいてWebからデータを取得するサービスを持っているとします。それは次のようになります。
var webBasedServiceModule = angular.module('WebBasedService', []);
webBasedServiceModule
.factory('webBasedService', function ($http) {
var rootUrl = "http://example.com/myApi?query=";
return {
getData: function(query) {
return $http.get(rootUrl + query)
.then(function(httpCallbackArg) {
return doSomething(httpCallbackArg);
});
}
}
});
私は$ HTTPサービスを注入していますので、私はテストのためにそれを模擬することができます。しかし、クラス内でハードコードされたWebサービスのルートURLを取得しました。理想的には、このURLをサービスクラスから切り離して、それを依存関係として注入したいと思います。しかし、ファクトリ関数に文字列や別のプリミティブを挿入する方法はありません。私が見ることができる
var webBasedServiceModule = angular.module('WebBasedService', []);
webBasedServiceModule
.factory('webBasedService', function ($http, rootUrl) {
return {
getData: function(query) {
return $http.get(rootUrl + query)
.then(function(httpCallbackArg) {
return doSomething(httpCallbackArg);
});
}
}
});
一つの解決策はただurlProvider.Url
または類似を呼び出し、その後、UrlProviderService
を作成し、WebBasedService
モジュールにそのサービスを注入することである:私はこのように見えるように、理想的にコードたいと思います。それはちょっと臭いようです。構成データの1つのためにまったく新しいサービスを作成するのは難しいようです。
var urlServiceModule = angular.module('UrlService', []);
urlServiceModule
.factory('rootUrl', function() {
return "http://example.com/myApi?query=";
});
これはしかし、サービスコンセプトの乱用のように思える:私もそうのように、私は、が文字列でサービスを作成するかもしれないと想像することができます。
AngularJSは、プリミティブを構成データとして注入する問題に対する「標準的な」ソリューションを提供していますか?または、私は上記のソリューションの1つを使用していますか?