如何在AngularJS中动态更改$ http服务URL?

时间:2016-04-16 13:45:28

标签: javascript angularjs

我正在使用angular $ http服务来获取/发布数据。目前所有服务都使用通用URL来检索数据。现在我要求根据具体情况在2个URL之间切换。那么,如果不对现有服务代码进行许多更改,无缝实现此功能的最佳方法是什么?

注意 - 我不想在每项服务上编写识别逻辑。

我创建了示例来解释问题。在示例中,我目前使用来自常量服务的TEST_FILE1作为URL,但我想根据特定条件在TEST_FILE1和TEST_FILE2之间切换,例如根据randomNumberService返回的随机数。示例示例 - Sample Plunkar任何帮助表示赞赏!

app.constant('RESOURCES', (function() {
  return {
    TEST_FILE1: 'test.json',
    TEST_FILE2: 'test1.json',
  }
})());

app.factory('myService', function($http, RESOURCES) {
  return {
    async: function() {
      return $http.get(RESOURCES.TEST_FILE1); //1. this returns promise
    }
  };
});

app.factory('randomNumberService', function() {
  return {
    getRandomNumber: function() {
      return Math.floor((Math.random() * 6) + 1);
    }
  }
});

1 个答案:

答案 0 :(得分:1)

要不在任何地方重复URL选择逻辑,那么您必须在其他工厂中移动它。

app.factory('identification', function (RESOURCES, randomNumberService) {
    return {
        getUrl: function () {
            var randomNumber = randomNumberService.getRandomNumber();
            var url = randomNumber > xxx ? RESOURCES.TEST_FILE1 : RESOURCES.TEST_FILE2;
            return url;
        }
    };
});

app.factory('myService', function($http, identification) {
  return {
    async: function() {
      return $http.get(identification.getUrl());
    }
  };
});

app.factory('randomNumberService', function() {
  return {
    getRandomNumber: function() {
      return Math.floor((Math.random() * 6) + 1);
    }
  }
});