例如,我有几个服务向同一个url根目录的各个端点发出http请求。我希望能够改变这个根。
我的服务模块看起来像这样。
var host = 'http://my-api.com';
return {
get: function(id) {
return $http({
url: host + '/contacts/' + id,
method: 'GET'
});
},
...
switchHost: function(url){
host = url;
}
});
因此,我可以在控制器中调用ContactService.switchHost('http://new-url')
来更新此特定服务。
我希望有一些 Root Service ,我可以全局定义host
和switchHost
。
注意:此处的用例是我们的一些客户将访问我们的公司API,而其他客户将自行托管其资源。
答案 0 :(得分:1)
我建议你创建一个拦截器来消化像这样的角度值。
angular.module('...')
.value('HOST', 'http://www.fu.bar.com/')
.factory('InterceptorFactory', function (HOST) {
return {
request: function(config) {
config.url = HOST + config.url;
return config;
}
};
})
.config(['$httpProvider',function($httpProvider) {
$httpProvider.interceptors.push('InterceptorFactory');
}]);
每当您调用$ http服务时,都会调用工厂并添加您的主机。 如果要更新主机,只需要在任何块中注入值并更新它。
答案 1 :(得分:0)
感谢您的回复。我刚刚做了这样的事情。
angular.module('app.services').factory('RootService', function($http) {
return {
switchHost: function(url){
this.host = url;
},
host: 'http://app.apiary-mock.com'
}
});
这样客户端只需在设置页面上输入一个网址,根目录就会改变,这就是我想要的。