$http 统一资源封装方案
这篇文章(5620b0c5079a12ff3c4b2fe0)是从 Teambition 迁移过来的
封装
(function () {
'use strict';
angular.module('UM.comm',[])
.factory('Resources',Resources);
/**
* 统一资源生成器
* @param {$http} $http angular 内置方法
*/
function Resources($http){
function ResourceConstructor(options){
var _uri = options.uri;
var _isArray = options.isArray;
var _res = _isArray ? [] : {};
Object.defineProperties(
_res,
{
'setData' : {
value : _defineSetDataFunction(_isArray)
},
'get' : {
value : _get
},
'add' : {
value : _add
},
'delete' : {
value : _delete
}
}
);
function _defineSetDataFunction(_isArray) {
if (_isArray) {
return function (_data) {
_res.length = 0;
_res.splice.apply(_res, [1, 0].concat(_data));
};
} else {
return function (_data) {
angular.copy(_res, _data);
};
}
}
function _get() {
return $http.get(_uri).success(function(_data) {
_res.setData(_data);
});
}
function _add(_newData) {
return $http.post(_uri, _newData).success(function(_data) {
//
});
}
function _delete(_items) {
var items = [];
return $http.delete(_uri, {params:{ del : _items }})
}
return _res;
}
return ResourceConstructor;
}
Resources.$injector = ['$http'];
})();
生成实例
angular.module('UM.organization', ['UM.comm','ngMaterial'])
.factory('ResOrgs', ResOrgs)
function ResOrgs(Resources) {
return new Resources({
uri : '/api/orgs',
isArray : true
});
}
ResOrgs.$injector = ['Resources'];