boostrap-table表格外掛筆記
阿新 • • 發佈:2021-08-01
1 bootstrap-table外掛介紹
一個基於bootstrap的表格渲染外掛,可以極大的簡化表格的渲染操作
2 下載
github:https://github.com/wenzhixin/bootstrap-table
中文官網:https://www.bootstrap-table.com.cn/
英文官網:https://bootstrap-table.com/
下載後相關的依賴都在dist資料夾下
3 入門案例
請求json資料渲染表格
3.1 搭建工程
其中data.json
的資料檔案內容如下:
[ {"id":"1","name":"tom","sal":"4000","sex":"男","age":"18"}, {"id":"2","name":"jerry","sal":"2000","sex":"女","age":"26"}, {"id":"3","name":"heliufang","sal":"8000","sex":"男","age":"25"}, {"id":"4","name":"lucy","sal":"2500","sex":"女","age":"28"}, {"id":"5","name":"linda","sal":"1000","sex":"女","age":"16"}, {"id":"6","name":"jack","sal":"2500","sex":"男","age":"28"} ]
這個data.json只是在做前端分頁的時候使用
3.2 編寫測試程式碼
【1.入門案例.html】
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 引入相關樣式表 --> <link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap.min.css"/> <link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap-theme.min.css"/> <link rel="stylesheet" type="text/css" href="bootstrap-table/bootstrap-table.min.css"/> </head> <body> <!-- 建立表格容器 --> <table id="table"></table> <!-- 引入相關js --> <script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script> <script src="bootstrap3/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script> <script src="bootstrap-table/bootstrap-table.min.js" type="text/javascript" charset="utf-8"></script> <script src="bootstrap-table/bootstrap-table-zh-CN.min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> //通過bootrap-table外掛渲染表格 $('#table').bootstrapTable({ url: 'json/data.json',//請求的url columns: [{ field: 'id', title: '序號' }, { field: 'name', title: '姓名' }, { field: 'sal', title: '薪水' }, { field: 'sex', title: '性別' },{ field: 'age', title: '年齡' }] }); </script> </body> </html>
測試結果如下:
可以看到外掛自動幫我們把資料渲染好了,是不是很方便!!!
4 前端分頁實現
【2.前端分頁.html】將【1.入門案例.html】中的渲染的js程式碼改成如下:
//通過bootrap-table外掛渲染表格 $('#table').bootstrapTable({ url: 'json/data.json', columns: [{ field: 'id', title: '序號' }, { field: 'name', title: '姓名' }, { field: 'sal', title: '薪水' }, { field: 'sex', title: '性別' },{ field: 'age', title: '年齡' }], striped: false, //是否顯示行間隔色 cache: false, //是否使用快取,預設為true,所以一般情況下需要設定一下這個屬性(*) pagination: true, //是否顯示分頁(*) sortable: true, //是否啟用排序 sortOrder: "asc", //排序方式 sidePagination: "client",//分頁方式:client客戶端分頁,server服務端分頁(*) pageNumber: 1,//初始化載入第一頁,預設第一頁,並記錄 pageSize: 2,//每頁的記錄行數(*) pageList: [2, 5, 10, 20], //可供選擇的每頁的行數(*) search: true,//是否顯示錶格搜尋 strictSearch: false,//是否使用嚴格搜尋模式 showColumns: true, //是否顯示所有的列(選擇顯示的列) showRefresh: true,//是否顯示重新整理按鈕 minimumCountColumns: 2,//最少允許的列數 clickToSelect: true,//是否啟用點選選中行 //height: 500,//行高,如果沒有設定height屬性,表格自動根據記錄條數設定表格高度 uniqueId: "id",//每一行的唯一標識,一般為主鍵列 showToggle: true,//是否顯示詳細檢視和列表檢視的切換按鈕 cardView: false,//是否顯示詳細檢視 detailView: false,//是否顯示父子表 });
效果如下:
5 工具欄
工具欄實現分為兩步
-
準備工具按鈕容器
-
bootstrap-table中引用外掛
加上這個配置即可:toolbar: '#toolbar', //工具按鈕用哪個容器
案例【3.工具欄.html】
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- 引入相關樣式表 -->
<link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap-table/bootstrap-table.min.css"/>
</head>
<body>
<!-- 工具欄容器 -->
<div id="toolbar" class="row" style="margin-left: 5px;">
<button type="button" class="btn btn-default col-md-4">新增</button>
<button type="button" class="btn btn-info col-md-4">修改</button>
<button type="button" class="btn btn-danger col-md-4">刪除</button>
</div>
<!-- 建立表格容器 -->
<table id="table"></table>
<!-- 引入相關js -->
<script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap3/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap-table/bootstrap-table.min.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap-table/bootstrap-table-zh-CN.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
//通過bootrap-table外掛渲染表格
$('#table').bootstrapTable({
url: 'json/data.json',
columns: [{
field: 'id',
title: '序號'
}, {
field: 'name',
title: '姓名'
}, {
field: 'sal',
title: '薪水'
}, {
field: 'sex',
title: '性別'
},{
field: 'age',
title: '年齡'
}],
toolbar: '#toolbar', //工具按鈕用哪個容器
striped: true, //是否顯示行間隔色
cache: false, //是否使用快取,預設為true,所以一般情況下需要設定一下這個屬性(*)
pagination: true, //是否顯示分頁(*)
sortable: true, //是否啟用排序
sortOrder: "asc", //排序方式
sidePagination: "client", //分頁方式:client客戶端分頁,server服務端分頁(*)
pageNumber: 1, //初始化載入第一頁,預設第一頁,並記錄
pageSize: 2, //每頁的記錄行數(*)
pageList: [2, 5, 10, 20], //可供選擇的每頁的行數(*)
search: true, //是否顯示錶格搜尋
strictSearch: false,
showColumns: true, //是否顯示所有的列(選擇顯示的列)
showRefresh: true, //是否顯示重新整理按鈕
minimumCountColumns: 2, //最少允許的列數
clickToSelect: true, //是否啟用點選選中行
//height: 500, //行高,如果沒有設定height屬性,表格自動根據記錄條數設定表格高度
uniqueId: "id", //每一行的唯一標識,一般為主鍵列
showToggle: false, //是否顯示詳細檢視和列表檢視的切換按鈕
cardView: false, //是否顯示詳細檢視
detailView: false, //是否顯示父子表
});
</script>
</body>
</html>
效果如下:
6 後端分頁
後端介面,我後端是java寫的具體分頁程式碼就不上了,這裡把介面文件寫出來
-
請求方式:GET
-
請求引數
pageNum:查詢的是哪一頁
pageSize:每頁顯示的條數
name:姓名
age:年齡
比如:http://localhost:8080/user/searchPage?name=tom&age=&pageSize=2&pageNum=1
- 響應(json)
注意:這裡必須是返回{"total":"","rows",[]}這種格式的資料
total
是總共的記錄數量
rows
是當前頁查出來的記錄物件陣列
{
"total": 1,
"rows": [
{
"id": 1,
"name": "tom",
"age": 18,
"gender": "1",
"createTime": "2021-02-22 09:53:24"
}
]
}
【4.後端分頁.html】
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- 引入相關樣式表 -->
<link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap3/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" type="text/css" href="bootstrap-table/bootstrap-table.min.css"/>
</head>
<body>
<div class="container">
<!-- 工具欄 -->
<div id="toolbar" class="row" style="margin-left: 5px;">
<form class="form-inline">
<button type="button" class="btn btn-success">新增</button>
<div class="form-group">
<label>姓名</label><input type="text" class="form-control" id="nameTxt"/>
</div>
<div class="form-group">
<label>年齡</label><input type="text" class="form-control" id="ageTxt"/>
</div>
<button onclick="search()" type="button" class="btn btn-info">查詢</button>
</form>
</div>
<!-- 建立表格容器 -->
<table id="myTable"></table>
</div>
<!-- 引入相關js -->
<script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap3/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap-table/bootstrap-table.min.js" type="text/javascript" charset="utf-8"></script>
<script src="bootstrap-table/bootstrap-table-zh-CN.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
//封裝一個初始化表格的方法
function initTable(tableId,url,columns,query){
//將原有的表格銷燬
$("#"+tableId).bootstrapTable('destroy');
//通過bootrap-table外掛渲染表格
var myTable = $('#'+tableId).bootstrapTable({
method: 'GET', //請求方式(*)
url: url,
columns: columns,
toolbar: '#toolbar', //工具按鈕用哪個容器
striped: true, //是否顯示行間隔色
cache: false,//是否使用快取,預設為true,所以一般情況下需要設定一下這個屬性(*)
pagination: true,//是否顯示分頁(*)
sortable: false,//是否啟用排序
sortOrder: "asc", //排序方式
sidePagination: "server", //分頁方式:client客戶端分頁,server服務端分頁
pageNumber: 1, //初始化載入第一頁,預設第一頁,並記錄
pageSize: 2, //每頁的記錄行數(*)
pageList: [2, 5, 10, 20],//可供選擇的每頁的行數(*)
search: false,//是否顯示錶格搜尋
strictSearch: false,
showColumns: true,//是否顯示所有的列(選擇顯示的列)
showRefresh: true,//是否顯示重新整理按鈕
minimumCountColumns: 2,//最少允許的列數
clickToSelect: true,//是否啟用點選選中行
//height: 500,//行高,如果沒有設定height屬性,表格自動根據記錄條數設定表格高度
uniqueId: "id",//每一行的唯一標識,一般為主鍵列
showToggle: false,//是否顯示詳細檢視和列表檢視的切換按鈕
cardView: false,//是否顯示詳細檢視
detailView: false,//是否顯示父子表
//得到查詢的引數
queryParams : function (params) {
//這裡的鍵的名字和控制器的變數名必須一致,這邊改動,控制器也需要改成一樣的
/* var temp = {
pageSize: params.limit, //頁面大小
pageNum: (params.offset / params.limit) + 1, //頁碼
//sort: params.sort, //排序列名
//sortOrder: params.order //排位命令(desc,asc)
//自定義的引數
name:params.name, //姓名
age:params.age //年齡
}; */
if(null == query || undefined == query){
query = {};
}
query.pageSize = params.limit; //頁面大小
query.pageNum = (params.offset / params.limit) + 1; //頁碼
console.log(query);
return query;
}
});
}
//初始化列資訊
var columns = [
{
field: 'id',
title: '序號'
},
{
field: 'name',
title: '姓名'
},
{
field: 'gender',
title: '性別',
//formatter 為格式化函式,後端返回的性別型別: 1男2女 所以這裡要處理一下再顯示
formatter: function(value, row, index){
//console.log(value);//當前列資料
//console.log(row);//當前行json資料
if(value == 1){
return "男";
}
return "女";
}
},
{
field: 'age',
title: '年齡'
},
{
field: '',
title: '操作',
//如果需要對列處理可以寫在formatter函式中
formatter: function(value,row,index){
return '<button onclick="updateFun('+row.id+')" type="button" class="btn btn-warning btn-xs">修改</button> '
+ '<button onclick="deleteFun('+row.id+')" type="button" class="btn btn-danger btn-xs">刪除</button>'
}
}
];
//點選修改按鈕
function updateFun(data){
alert("修改:"+data)
console.log(data)
}
//點選刪除按鈕
function deleteFun(data){
alert("刪除:"+data)
console.log(data)
}
//點選查詢按鈕
function search(){
var name = $("#nameTxt").val();
var age = $("#ageTxt").val();
var queryParams = {name,age};
initTable("myTable",'http://localhost:8080/user/searchPage',columns,queryParams);
}
//第一次進入頁面載入表格
initTable("myTable",'http://localhost:8080/user/searchPage',columns,null);
</script>
</body>
</html>
執行效果如下: