bootstrap table插件動(dòng)態(tài)加載表頭
bootstrap的table屬性已經(jīng)很熟悉了,最近遇到一個(gè)問題,猶豫每個(gè)列表加載的數(shù)據(jù)需求不同,所以需要?jiǎng)討B(tài)的更換表頭。 網(wǎng)上有很多加載表格數(shù)據(jù)的例子,但是卻沒有找到如何動(dòng)態(tài)加載表格,再加在數(shù)據(jù)。 雖然可以一個(gè)表格加載一種數(shù)據(jù),但是本著學(xué)習(xí)的態(tài)度嘗試了下這種方式,結(jié)果發(fā)現(xiàn)是可以執(zhí)行的。分享下思路和實(shí)現(xiàn)過程,以備日后使用。
思路:
1、寫接口,查詢出要展示的列。注意接口中必須要有字段中文名稱(columns屬性的title值),字段的英文名稱(columns的field字段),特別注意filed字段應(yīng)該與最后查詢出的列表中返回的json數(shù)據(jù)中的key保持一致,不然取不到值。
2、ajax請(qǐng)求剛才的接口,查詢出columns,并給table的columns賦值。
3、加載表格展示。
大致代碼如下:
表格:
var peopleOptions;
// 人口列表加載
function tableItem() {
peopleOptions = {
method : "POST", // 使用get請(qǐng)求到服務(wù)器獲取數(shù)據(jù)
url : path + "/api/information/people/getList", // 獲取數(shù)據(jù)的地址
contentType : "application/x-www-form-urlencoded",// 重要否則POST會(huì)報(bào)錯(cuò)
striped : false, // 表格顯示條紋
pagination : true, // 啟動(dòng)分頁
pageSize : 10, // 每頁顯示的記錄數(shù)
pageNumber : 1, // 當(dāng)前第幾頁
pageList : [ 10, 20, 50 ], // 記錄數(shù)可選列表
uniqueId : "id",
showColumns : false, // 顯示下拉框勾選要顯示的列
showToggle : false, // 顯示 切換試圖(table/card)按鈕
clickToSelect : false, // 點(diǎn)擊可選
singleSelect : false, // 禁止多選
maintainSelected : true, // 在點(diǎn)擊分頁按鈕或搜索按鈕時(shí),將記住checkbox的選擇項(xiàng)
sortable : true, // 禁止所有列的排序
sidePagination : "server", // 表示服務(wù)端請(qǐng)求 后臺(tái)分頁
toolbar : "#toolbar",// 指明自定義的toolbar
queryParamsType : "undefined",
queryParams : function queryParams(params) {
var param = {
pageNumber : params.pageNumber,
pageSize : params.pageSize,
orgId : ztreeId,
nodeId : ztreeId,
citizenName : $("#fullname").val().trim(),
sex : $("#sex").val(),
age : $("#age").val().trim(),
identityCode : $("#idCard").val().trim(),
cellPhone : $("#isMobile").val().trim(),
adress : $("#adress").val().trim(),
};
return param;
},
onLoadSuccess : function() { // 加載成功時(shí)執(zhí)行
responseHandler : function(res) { // 格式化數(shù)據(jù)
console.log(res);
if (res.data.total != undefined)
tmp = {
total : res.data.total,
rows : res.data.rows
};
if (res.data.total == undefined)
tmp = {
total : res.data.length,
rows : res.data
};
return tmp;
},
columns : [ {
checkbox : true,
title : '全選',
valign : 'middle'
}, {
title : '序號(hào)',
field : 'number',
width : '40px',
align : 'center',
valign : 'middle',
formatter : indexFormatter
}, {
title : '姓名',
field : 'citizenName',
align : 'center',
valign : 'middle',
}, {
title : '年齡',
field : 'age',
align : 'center',
width : 28,
valign : 'middle',
formatter : ageFormatter
}, {
title : '性別',
field : 'sex',
width : 28,
align : 'center',
valign : 'middle',
},{
title : '身份證號(hào)',
field : 'identityCode',
align : 'center',
valign : 'middle',
}, {
title : '民族',
field : 'nation',
align : 'center',
valign : 'middle',
} ]
}
}
$table = $("#table").bootstrapTable(peopleOptions);
};
動(dòng)態(tài)獲取列:
function getColumns() {
// 加載動(dòng)態(tài)表格
$.ajax({
url : path + "api/information/people/getLableColumn?ztreeId=" + ztreeId,
type : 'get',
dataType : "json",
async : false,
success : function(returnValue) {
// 未查詢到相應(yīng)的列,展示默認(rèn)列
if (returnValue.retCode == "0") {
//沒查到列的時(shí)候把之前的列再給它
myColumns = $table.bootstrapTable('getOptions').columns[0];
} else {
// 異步獲取要?jiǎng)討B(tài)生成的列
var arr = returnValue.data;
$.each(arr, function(i, item) {
myColumns.push({
"field" : item.labelColumnCode,
"title" : item.labelColumnName,
"hide" : true,
"align" : 'center',
"valign" : 'middle'
});
});
}
console.log(myColumns);
return myColumns;
}
});
}
刷新列表:
//點(diǎn)擊左側(cè)樹后重新加載表格
$table.bootstrapTable(
"refreshOptions",
{
url : path + "/api/peopledataInfo/getPeopleInfoList", // 獲取數(shù)據(jù)的地址
columns : myColumns,
}
);
}
需要注意的是bootstrap的table提供了兩個(gè)刷新的方法,一個(gè)refresh,一個(gè)refreshOptions,前者只是刷新當(dāng)前表格,后者會(huì)將表格中的組件全部更新一遍,因?yàn)槲覀兲鎿Q了url和columns,所以需要調(diào)用后者。
展示效果:


動(dòng)態(tài)加載表頭其實(shí)就是類似Echart中動(dòng)態(tài)加載數(shù)據(jù)的感覺一樣,只是改變整個(gè)Option中的相關(guān)屬性即可。
優(yōu)點(diǎn):代碼量會(huì)大大減少,當(dāng)我們要加載不同數(shù)據(jù)且樣式一樣的表格的時(shí)候可以采用這樣的方式。
缺點(diǎn):樣式很難維護(hù)。前端人員不好定位bug,所以很難修改相應(yīng)的樣式bug。
依據(jù)項(xiàng)目實(shí)際情況,擇優(yōu)使用吧。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
webpack file-loader和url-loader的區(qū)別
這篇文章主要介紹了webpack file-loader和url-loader的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
Javascript實(shí)現(xiàn)鼠標(biāo)框選操作 不是點(diǎn)擊選取
這篇文章主要介紹了Javascript實(shí)現(xiàn)鼠標(biāo)框選操作,不是點(diǎn)擊選取,利用鼠標(biāo)進(jìn)行框選,感興趣的小伙伴們可以參考一下2016-04-04
JavaScript實(shí)現(xiàn)簡單的數(shù)字倒計(jì)時(shí)
這里給大家總結(jié)了一些比較常用的javascript實(shí)現(xiàn)的倒計(jì)時(shí)功能的代碼,非常的實(shí)用,有需要的小伙伴可以參考下。2015-05-05
學(xué)習(xí)Javascript閉包(Closure)知識(shí)
這篇文章主要介紹了學(xué)習(xí)Javascript閉包(Closure)知識(shí)的相關(guān)資料,需要的朋友可以參考下2016-08-08
Three.js 再探 - 寫一個(gè)微信跳一跳極簡版游戲
最近項(xiàng)目結(jié)束,很空閑,于是就試著仿照微信跳一跳寫了一個(gè)極簡版的游戲,到底簡單到什么程度呢?大家可以參考下本文2018-01-01
JavaScript實(shí)現(xiàn)頁面電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)頁面電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
javascript實(shí)現(xiàn)textarea中tab鍵的縮排處理方法
這篇文章主要介紹了javascript實(shí)現(xiàn)textarea中tab鍵的縮排處理方法,涉及javascript處理鼠標(biāo)事件及頁面元素的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Javascript前端事件循環(huán)機(jī)制詳細(xì)講解
單線程的同步等待極大影響效率,任務(wù)不得不一個(gè)一個(gè)等待執(zhí)行,對(duì)于網(wǎng)頁應(yīng)用是無法接受的。所以Javascript使用事件循環(huán)機(jī)制來解決異步任務(wù)的問題。本文就來講講Javascript的事件循環(huán)機(jī)制,希望對(duì)你有所幫助2022-12-12

