Node.js中Bootstrap-table的兩種分頁的使用方法

1 Bootstrap-table使用


bootstrap-table是一個基於bootstrap的表格插件,在使用上有點類似於easyui中的datagrid,但是樣式上要比easyui美觀一些,而且更加符合現代網站或者系統的前端要求。

不僅如此,bootstrap-table在使用中還有諸多獨特之處:

  • 自帶前端搜索功能,還能定製搜索
  • 前端列表詳情展示,不僅僅是表格的形式
  • 分頁更加自由、更加多樣化。可以根據不同的需求選擇不同的分頁方式。

bootstrap-table的使用通過查看官方文檔就可掌握,現在主要記錄bootstrap-table中獨特的、強大的分頁功能。

注意: 文中後臺邏輯使用Node.js實現,數據庫爲mongodb

2 bootstrap-table中兩種分頁


bootstrap-table的分頁方式是有bootstrap-table中sidePagination屬性決定,此屬性有兩個值,client,server,分別代表前端分頁和服務器後端分頁。默認值爲client 前端分頁。

首先在頁面中引入必須的插件包,如下:

<link rel="stylesheet" href="bootstrap.min.css">
<link rel="stylesheet" href="bootstrap-table.css">

<script src="jquery.min.js"></script>
<script src="bootstrap.min.js"></script>
<script src="bootstrap-table.js"></script>
<-- 本地化js -->
<script src="bootstrap-table-zh-CN.js"></script>

2.1 前端分頁

前端頁面代碼如下:

$("#gridList").bootstrapTable({
            url:'/user/getUserList',//url獲取數據
            method:'get',//方法
            cache:false,//緩存
            pagination:true,//分頁
            sidePagination:'client',//指定在前端客戶端分頁
            pageNumber:1,//頁號
            pageSize:10,//頁面數據條數
            pageList:[10,20,30,40,50],//分頁列表
            uniqueId:'_id',//唯一id
            toolbar:'#toolbar',//工具欄
            showColumns:true,//顯示選擇列
            showRefresh:true,//顯示刷新按鈕
            showToggle:true,//顯示切換視圖:列表和詳情視圖切換
            search:true,//顯示搜索框
            columns:[
                {checkbox:true},
                {field:'user_no',title:'用戶編碼',width:'10%'},
                {field:'user_name',title:'用戶姓名',width:'20%'
                },
                {field:'user_sex',title:'用戶性別',width:'8%',align:'center',
                    formatter:function(value,row,index){
                        if(value == '1'){
                            return '男';
                        }else{
                            return '女';
                        }
                    }},
                {field:'user_account',title:'登錄賬號',width:'10%'},
                {field:'user_role',title:'所屬角色',width:'10%'},
                {field:'user_sys',title:'所屬系統',width:'10%'},
                {field:'create_time',title:'創建時間',width:'20%',
                    formatter:function(value,row,index){
                        return dateTimeFormatter(value,'yyyy-MM-dd hh:mm:ss');
                    }
                }
            ]
        });

注意: 在前端頁面分頁中,sidePagination 必須設置爲client

部分後臺邏輯代碼如下:

/******user_route.js*********/
/**
 * 獲取用戶列表
 */
router.get('/getUserList',function(req,res){
    userServices.getUserList(req,res,function(err,users){
        if(err){
            res.send({success:false,msg:err,data:null});
        }else{
            res.send({'success':true,'msg':"獲取用戶列表成功",'total':users.length,'data':users});
        }
    });
});

/*******user_services.js********/
/**
 * 獲取用戶列表
 * @param req
 * @param res
 * @param callback
 */
exports.getUserList = function(req,res,callback){
    userModel.$user.find(function(err,users){
        if(err){
            callback('獲取用戶列表失敗!',null);
        }else{
            callback(null,users);
        }
    })
}

注意: 返回到前端的數據中,必須有 data 參數,bootstrap-table會根據返回的data參數,設置前端分頁。data參數值須爲一個數組,數組中包含返回的數據。

前端分頁在數據較少的時候非常適用,可以減少瀏覽器請求數,數據庫訪問此數,從而提高系統性能。但是不適合非常龐大的萬級數據量,返回的數據會放在內存中保存,龐大的數據量會消耗不少內存。

2.2 後端分頁

前端頁面js:

$("#gridList").bootstrapTable({
            url:'/user/getUserListPagination',//設置後臺分頁,必須設置URL獲取數據,或是重寫ajax方法
            method:'get',
            cache:false,
            pagination:true,
            sidePagination:'server',//設置爲後臺服務器分頁
            pageNumber:1,
            pageSize:10,
            pageList:[10,20,30,40,50],
            queryParamsType:'',//請求參數類型,默認爲`limit`,使用默認值不會向後臺出入分頁所需的頁號,頁數據數等必須值,所以需要設置爲空串
            queryParams:function(params){//向後臺傳輸參數。params爲bootstrap-table的options.
                var param = {
                    page:params.pageNumber,//獲取頁號
                    size:params.pageSize//獲取頁面數據量大小
                }
                return param;
            },
            uniqueId:'_id',
            toolbar:'#toolbar',
            showColumns:true,
            showRefresh:true,
            showToggle:true,
            search:true,
            columns:[
                {checkbox:true},
                {field:'user_no',title:'用戶編碼',width:'10%'},
                {field:'user_name',title:'用戶姓名',width:'20%'
                },
                {field:'user_sex',title:'用戶性別',width:'8%',align:'center',
                    formatter:function(value,row,index){
                        if(value == '1'){
                            return '男';
                        }else{
                            return '女';
                        }
                    }},
                {field:'user_account',title:'登錄賬號',width:'10%'},
                {field:'user_role',title:'所屬角色',width:'10%'},
                {field:'user_sys',title:'所屬系統',width:'10%'},
                {field:'create_time',title:'創建時間',width:'20%',
                    formatter:function(value,row,index){
                        return dateTimeFormatter(value,'yyyy-MM-dd hh:mm:ss');
                    }
                }
            ]
        });

注意: 代碼中註釋不分爲在後臺分頁中所必須設置的

後端邏輯代碼:

/********user_route.js*******/
/**
 * 後臺分頁獲取數據列表
 */
router.get('/getUserListPagination',function(req,res){
    var queryParams = req.query;
    var params= {
        page:queryParams.page,
        size:queryParams.size
    };
    userServices.getUserListPagination(params,function(err,users){//根據分頁條件查詢數據條數
        if(err){
            res.send({success:false,msg:err,data:null});
        }else{
            userServices.getUserList(req,res,function(err,allUsers){//查詢所有數據總條數
                if(err){
                    res.send({success:false,msg:err,data:null});
                }else{
                    res.send({'success':true,'msg':"獲取用戶列表成功",'total':allUsers.length,'rows':users});
                }
            });
        }
    });
});

/**********user_services.js********/
/**
 * 分頁查詢
 * @param params
 * @param callback
 */
exports.getUserListPagination = function(params,callback){

    var index = (params.page-1)*params.size;//設置分頁起點下標
    var size = parseInt(params.size);
    //設置分頁條件
    var query = userModel.$user.find({});
    query.limit(size);//條數
    query.skip(index);//下標

    //執行查詢
    query.exec(function(err,users){
        callback(err,users);
    });
}

注意: 選擇後臺分頁,返回到前臺的數據必須包含 total rows 兩個參數,total爲數據總數;rows爲返回的數據數,也是一個數組對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章