我正在使用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);
}
}
});
答案 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);
}
}
});