我使用服务与服务器进行通信以请求数据,我将它们保存在另一个文件中,因此它看起来像那样(并且更容易阅读):
var app_services = angular.module('app.services', [])
.service('dataService1', dataService1)
.service('dateService2', dataService2);
dataService1.$inject = ['http'];
function dataService1($http) {
return $http.get('api/datas')
.then(successCallback)
.catch(failCallback)
}
dataService2.$inject = ['http'];
function DataService2($http) {
//... code goes here
}
然后我从控制器那里打电话给他们:
ServiceController.$inject = ['dataService1'];
function testServiceController(dataService) {
return dataService.then(function(data) {
};
}
简单而明显。
无论如何,我需要服务器的每个服务响应都有适当的数据结构,我需要处理它。我这样做是通过将服务作为我工厂的对象来调用服务器响应的数据结构,所以代码如下所示:
var app_services = angular.module('app.services', [])
.factory('serviceFactory', serviceFactory)
.service('dataService', getService);
getService.$inject = ['serviceFactory'];
function getService(serviceFactory) {
var request = new ServiceFactory('api/datas')
return request.get();
}
serviceFactory.$inject = ['$http'];
function serviceFactory($http) {
var serviceObject = function(address) {
this.address = address;
};
serviceObject.prototype.get = function(){
return $http.get(this.address)
.then(this.getComplete)
.catch(this.getFailed);
};
serviceObject.prototype.getComplete = function (response) {
var data = response.data;
if ((data.error !== '0' || !data.msg.length > 0)) {
if (data.error !== '') {
throw new Error();
} else if (data.msg == '' || !data.msg.length > 0) {
throw new Error();
}
}
else {
return data;
}
};
serviceObject.prototype.getFailed = function (error) {
console.log('Something went wrong!');
};
return serviceObject;
}
这是一个很好的解决方案吗?或者我可以用另一种更好/更正确的方式来做这件事吗?我知道angular的方法.services('getService', getService)
将会提供一个函数实例。换句话说new getService
但我不知道是否嵌套var request = new ServiceFactory('/api/adress')
直接有任何意义或它是否使代码不易读取(好吧,对我来说它是清晰的,但我想提高自己作为程序员所以我需要咨询一些东西:P)。
PS。当然,代码在原始文件中看起来有点不同,但在复制粘贴之后,它丢失了它的原始缩进。