戦略は、構成の種類によって異なりますが、いくつかのオプションがあります。
モジュール全体の定数
いくつかの定数のみが必要な場合は、次.value()
のようにを使用できます。
var app;
app = angular.module("my.angular.module", []);
app.value("baseUrl", "http://myrestservice.com/api/v1");
//injecting the value
app.controller("MyCtrl", ['baseUrl', function (baseUrl) {
console.log(baseUrl); // => "http://myrestservice.com/api/v1"
}]);
詳細な回答はこちらをご覧ください。
config/config サービスの取得
私が個人的にやりたいことは、通常どおりサービスを介して他の場所から構成を取得することです。これが遠隔地であろうと、単なる静的情報であろうと、問題ではありません。
var app;
app = angular.module("my.angular.config", []);
app.service('Configuration', [function() {
return {
getbaseUrl: function() { return "http://myrestservice.com/api/v1" },
getConfig: function() {
return {
answer: 42,
question: "??"
}
}
}
}]):
編集: 外部フェッチの例:
var app;
app = angular.module('my.module.config', []);
app.factory('ConfigurationData', ['$http', '$q', function(http, q) {
var deferredConfig = q.defer();
//error handling ommited
http.get('http://remote.local/config.json').success(function(data) {
return deferredConfig.resolve(data);
});
return {
getConfig: function() {
return deferredConfig.promise;
}
};
}]);
このサービスを使用すると、構成を他のサービスに注入できますが、構成を操作する前に、サービスによって指定された promise を注入して解決する必要があるため、タイミングの問題が発生する可能性があります。
var app;
app = angular.module("my.other.module", ['my.module.config']);
app.factory('MyAwesomeService', ['ConfigurationData', function(config) {
config.getConfig().then(function(config) {
//do something with your config.
});
}]);
ここでは、さまざまな入力に反応できるため、もう少し細かく制御できます。繰り返しますが、それはユースケースによって異なります。構成を構造化するための追加のロジックが必要な場合は、ここでファクトリを使用できます。
最後に、構成をさらに制御したい場合は、
カスタム プロバイダー
プロバイダーはかなり便利ですが、設計が少し難しいと思います。baseUrl
アプリが動作するために必要な構成からを考慮すると、次のbaseUrl
ようなの値を必要とするサービスのプロバイダーを作成できます。
var app;
app = angular.module('my.angular.module', []);
app.provider("RestServiceProvider", function(){
this.baseUrl = 'http://restservice.com';
this.$get = function() {
var baseUrl = this.baseUrl;
return {
getBaseUrl: function() { return this.baseUrl; }
}
};
this.setBaseUrl = function(url) {
this.baseUrl = url;
};
});
これにより、アプリケーションの設定段階でクールなことを行うことができます:
app.config(['RestserviceProvider', function(restServiceProvider) {
restServiceProvider.setBaseUrl('http://wwww.myotherrestservice.com');
}]);
サービス/コントローラー/などでフェッチするすべてのインスタンス。ofRestService
には、baseUrl
注入した瞬間から構成フェーズのセットが含まれるようになります。
より詳細な概要については、この要点をお勧めします。