smart-table 服务端请求真分

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();
       
}])
原文地址:https://www.cnblogs.com/yiyangl/p/11424176.html