我在角度服务中有以下示例方法:
function send(data) {
return $http({
method: 'POST',
url: 'https://test.domain/test/send',
data: $httpParamSerializerJQLike(data)
});
}
https://test.domain/test
的域对于我的应用中的所有服务都是相同的。我不想每次都在每个服务中都写它。我可以将它抽象为常量并将其注入每个服务中,但我想知道是否有更聪明的解决方案。是否可以将域部分存储在拦截器中或欢迎任何其他建议。请提供代码示例,因为我对角度很新。感谢
答案 0 :(得分:2)
我说的不是将值抽象为常量,而是应该将$http
调用抽象为服务。然后,您可以将该服务注入到所有其他服务中,而不是$http
。例如:
angular.module('myApp').factory("myHttp", ["$http", function ($http) {
return function (config) {
config.url = "https://test.domain/test" + config.url;
return $http(config);
};
}]);
此服务正在有效地代理对$http
的调用,但是将您的常用URL添加到开头 - 这样您就可以将示例代码更改为:
function send(data) {
return myHttp({
method: 'POST',
url: '/send',
data: $httpParamSerializerJQLike(data)
});
}
当然,这只是一个如何进行抽象的例子 - myHttp
服务可以采用你喜欢的任何形式,具体取决于你最方便的方式。我认为这是一种比在这种情况下使用拦截器更好的解决方案,因为它允许您在使用它时进行选择,而不是将其应用于每个HTTP请求。
答案 1 :(得分:0)
创建拦截器并根据请求更改网址。
angular.module('app').factory('domainInterceptorService', [
function () {
var request = function (config) {
config.url = 'https://test.domain/' + config.url;
}
return config;
}
return {request: request};
});