将域存储在角度js服务

时间:2016-04-17 18:05:36

标签: angularjs

我在角度服务中有以下示例方法:

 function send(data) {

         return $http({
             method: 'POST',
             url: 'https://test.domain/test/send',
             data: $httpParamSerializerJQLike(data)

         });
     }

https://test.domain/test的域对于我的应用中的所有服务都是相同的。我不想每次都在每个服务中都写它。我可以将它抽象为常量并将其注入每个服务中,但我想知道是否有更聪明的解决方案。是否可以将域部分存储在拦截器中或欢迎任何其他建议。请提供代码示例,因为我对角度很新。感谢

2 个答案:

答案 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};
});