table.render({ id:'test', elem: '#test' //,height: 350 ,url: "/admin/members/list/" , request: { pageName: 'page' //頁碼的參數名稱,默認:page ,limitName: 'limit' //每頁數據量的參數名,默認:limit } ,initSort: { field: 'id' //排序字段,對應 cols 設定的各字段名 ,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默認排序 } ,sort:true //重點1:這裏的sort表示 table表在取得接口數據後,對頁面渲染後的table數據進行排序。同時,這裏的true 會影響頁面sort 上下小箭頭的 顯示效果 ,method: 'post' ,page: true ,limit: 10 ,toolbar: '#toolbarDemo' ,cols: [[ {field:'id', title:'ID',fixed: 'left', unresize: true, sort: true, width:70} ,{field:'user_name', title:'員工姓名'} ,{field:'name', title:'部門', sort: true} ,{field:'station', title:'崗位', sort: true} ,{field:'identity_card', title:'身份證',} ,{field:'user_phone', title:'手機號'} ,{field:'add_time', title:'添加時間', width:170} ,{field:'tag', title:'標籤',} ,{field:'update_time', title:'必修',toolbar: '#barTs'} ,{fixed: 'right', title:'操做', toolbar: '#barDemo', width:160} ]] });
因爲分頁問題,這種排序不少時候不符合項目需求,根據官方文檔介紹,能夠進行table sort與接口進行交互,從而影響數據 全文排序 效果數據庫
table.on('sort(test)', function(obj){ //注:tool是工具條事件名,test是table原始容器的屬性 lay-filter="對應的值" console.log(obj.field); //當前排序的字段名 console.log(obj.type); //當前排序類型:desc(降序)、asc(升序)、null(空對象,默認排序) console.log(this); //當前排序的 th 對象 //儘管咱們的 table 自帶排序功能,但並無請求服務端。 //有些時候,你可能須要根據當前排序的字段,從新向服務端發送請求,從而實現服務端排序,如: table.reload('test', { initSort: obj //記錄初始排序,若是不設的話,將沒法標記表頭的排序狀態。 layui 2.1.1 新增參數 ,where: { //請求參數(注意:這裏面的參數可任意定義,並不是下面固定的格式) field: obj.field //排序字段 在接口做爲參數字段 field order ,order: obj.type //排序方式 在接口做爲參數字段 field order } }); });
以上代碼,主要做用是:監聽table 表頭的事件,獲取到sort 排序的字段與排序類型(正序,倒序),把 該參數 傳回 接口,並對數據庫 進行排序查詢。ide
接口中服務端代碼處理:工具
$param['order_name'] = empty($this->request->post('field')) ?'id':$this->request->post('field'); $param['order_type'] = empty($this->request->post('order')) ?'desc':$this->request->post('order');
看下我聯繫點擊三次顯示的打印數據的效果post
//監聽排序 table.on('sort(test)', function(obj){ //注:tool是工具條事件名,test是table原始容器的屬性 lay-filter="對應的值" console.log(obj.field); //當前排序的字段名 console.log(obj.type); //當前排序類型:desc(降序)、asc(升序)、null(空對象,默認排序) console.log(this) //當前排序的 th 對象*/ });
這裏還要說一個 layui中 排序的一個操做規則: 若是連續 點擊 三下 表頭(不是點擊 排序的上下小箭頭),table排序會有三種排序狀態,按順序分別是 升序、降序、返回點擊前 初始狀態排序。優化
在排序的監控事件中 獲取到的排序類型 就是上面代碼中也寫過的 ui
console.log(obj.type); //當前排序類型:desc(降序)、asc(升序)、null(空對象,默認排序)
第三次點擊,服務端接收的數據 以下this
$param['order_name'] = empty($this->request->post('field')) ?'id':$this->request->post('field'); //接到的數據 "name" $param['order_type'] = empty($this->request->post('order')) ?'desc':$this->request->post('order'); //接到的數據 null
因此在 服務端還有加一個判斷處理url
$param['order_name'] = empty($this->request->post('field')) ?'add_time':$this->request->post('field'); $param['order_type'] = empty($this->request->post('order')) ?'desc':$this->request->post('order'); if(empty($this->request->post('order'))){ $param['order_name'] ='id'; //改爲 最初始 默認的排序字段 }
固然,table排序還涉及如 table 渲染的顯示字段是 name ,則排序須要根據 關聯表的id 來排序,也是能夠的,spa
但目前layui 對這塊 支持還須要優化下 排序後的頁面效果code