HTML
<table st-table='shortData.data' st-pipe="callServer"></table>
factory
app.factory('dataResource', ['$q', '$filter', '$timeout', '$http', function($q, $filter, $timeout, $http) {
var baseData = {};
function getPage(start, number, params, baseUrl, initDatas) {
/*
* start 当前页码
* number 每页数量
* params pagination页码数 search搜索 sort排序
*/
var start = start;
var deferred = $q.defer();
var pages = 0;
var filterStr = '';
if (initDatas) {
baseData = initDatas;
}
var filtered = params.search.predicateObject ? $filter('filter')(baseData.data, params.search.predicateObject) : baseData.data;
//排序
if (params.sort.predicate) {
filtered = $filter('orderBy')(filtered, params.sort.predicate, params.sort.reverse);
}
var result = filtered.slice(start, start + number);
var setStart = Math.floor(start / number) + 1;
//筛选
if (params.search.predicateObject) {
angular.forEach(params.search.predicateObject, function(val, key) {
filterStr += key + '=' + val + '&';
})
if (setStart != 1 && setStart == Math.ceil(filtered.length / number)) {
$http({
method: 'get',
url: baseUrl + '?offset=' + Math.ceil(filtered.length) + '&amount=100&' + filterStr
}).then(function(response) {
angular.forEach(response.data.data, function(val, key) {
baseData.data.push(val);
});
deferred.resolve({
columns: baseData.columns,
data: result,
numberOfPages: Math.ceil(filtered.length / number)
});
}, function() {
});
} else {
if (JSON.stringify(params.search.predicateObject) == "{}") {
filterStr = 'amount=100';
}
$http({
method: 'get',
url: baseUrl + '?' + filterStr
}).then(function(response) {
baseData.data = response.data.data;
var result = baseData.data.slice(start, start + number);
deferred.resolve({
columns: baseData.columns,
data: result,
numberOfPages: Math.ceil(baseData.data.length / number)
});
if (JSON.stringify(params.search.predicateObject) == "{}") {
//重置搜索
delete params.search.predicateObject
}
}, function() {
});
}
} else {
//默认执行
if (setStart == Math.ceil(filtered.length / number)) {
$http({
method: 'get',
url: baseUrl + '?offset=' + Math.ceil(filtered.length) + '&amount=100'
}).then(function(response) {
if(response.data.data.length>0){
angular.forEach(response.data.data, function(val, key) {
baseData.data.push(val);
});
deferred.resolve({
columns: baseData.columns,
data: baseData.data.slice(start, start + number),
numberOfPages: Math.ceil(filtered.length / number)
});
}else{
return
}
}, function() {
});
} else {
deferred.resolve({
columns: baseData.columns,
data: result,
numberOfPages: Math.ceil(filtered.length / number)
});
}
}
return deferred.promise;
}
return {
getPage: getPage
};
}]);
app.controller('snvindelController', [
'$scope',
'ngTip',
'$http',
'toaster',
'Upload',
'$timeout',
'dataResource',
function($scope, ngTip, $http, toaster, Upload, $timeout, dataResource) {
//初始化远程数据
$scope.callServer = function(tableState,StTableController,initDatas) {
$scope.isLoading = true;
var pagination = tableState.pagination;
var start = pagination.start || 0;
var number = pagination.number || 10;
var baseUrl ='/ismartDB/snvindel';
dataResource.getPage(start, number, tableState,baseUrl,initDatas).then(function(response) {
$scope.shortData = response;
tableState.pagination.numberOfPages = response.numberOfPages; //set the number of pages so the pagination can update
$scope.isLoading = false;
});
};
//重置远程数据
$scope.resetData = function() {
var config = {
config: {},
options: {},
pagination: { start: 0, totalItemCount: 0, number: 10, numberOfPages: 10 },
search: {},
sort: {}
}
$http({
method: 'get',
url: $scope.baseUrl + 'ismartDB/snvindel?amount=100'
}).then(function(response) {
if (response.data.error) {
toaster.pop({
type: 'error',
body: response.data.error,
timeout: 0
});
} else {
$scope.callServer(config,'',response.data)
}
}, function() {
toaster.pop({
type: 'error',
body: '列表获取失败请与管理员联系',
timeout: 0
});
});
};
$scope.resetData();
}])