1. 程式人生 > >h5學習筆記:layui table

h5學習筆記:layui table

最近在做Layui的後臺,發現Layui這個方案也不錯,能夠快速地在後臺直接部署。相比還要配置webpack,Layui jquery體系開箱即用在一些單獨的情況下還是挺不錯的。最近整理一下現在梳理一下Table元件的用法。

一 、Table 元件

Table元件可以採用官方提供的三種方式來獲取資料。官方推薦js一種。這樣定義一個table元件。定義一個id 和lay-filter

<table id="demo" lay-filter="test"></table>

接下來,還要新增js欄位讓資料展示出來。

<script>
layui.use('table'
, function(){ var table = layui.table; //第一個例項 table.render({ elem: '#demo', height: 315, url: "{:url('admin/example/read')}", //資料介面 page: true, //開啟分頁 id: 'testReload',//資料搜尋,這個過程會發送後端 cols: [[ //表頭 {type:'checkbox',fixed: true}, {field: 'id', title: 'ID', width:80
, sort: true,fixed: true}, {field: 'name', title: '姓名', width:80}, {field: 'sex', title: '性別', width:80, sort: true,templet:'<div>{{ d.sex==0? "男":"女" }}</div>'}, {field: 'telephone', title: '電話', width:80} , {field: 'email', title: '郵件', width: 177}, {field: 'leader'
, title: '法人', width: 80}, {field: 'create_time', title: '建立時間', width: 180, sort: true}, {fixed:'right',title:'操作',align:'center',toolbar:'#barDemo'} ]], });
</script>

二 、定義Table 模版

Tabel元件採用js這個方案的時候,特別在表格需要經常編輯,刪除等常規的操作,layui提供了一個模版操作方式。可以為此新增一個text/html 模版

在每一個欄位列加上一個toolbar的欄位,指定為工具欄,然後將定義的模版關聯起來。

 {fixed:'right',title:'操作',align:'center',toolbar:'#barDemo'}
<table id="demo" lay-filter="test"></table>
<script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>
</script>

並且需要將text/html 作為一個模版使用。有趣的是,這個模版裡面還需要對編輯操作加上事件處理。例如官方引入提供的lay-event=“edit” 編輯,lay-event =“del” 刪除的含義。

三 、新增Table 元件js互動

有了表格中常規化的操作,編輯,刪除接下來,還要處理這些行為。這個時候,需要使用layui的on方法進行事件監聽。這個監聽會對整個表格監聽。根據事件不同的型別,然後對裡面的行為進行分別處理。

  //監聽事件,填寫lay-filter才能排程
  table.on('tool(test)', function(obj){
    var data = obj.data;
     if(obj.event === 'del'){


    } else if(obj.event === 'edit'){


    }
  });

然後根據點選裡面的事情進行編輯,如彈窗,刪除的邏輯等等。

  //監聽事件,填寫lay-filter才能排程
  table.on('tool(test)', function(obj){
    var data = obj.data;
     if(obj.event === 'del'){
      layer.confirm('真的刪除行麼', function(index){

        deleteData([data.id],function(){         
            obj.del();
            layer.close(index);
            layer.msg('刪除成功');
        })
      });

    } else if(obj.event === 'edit'){
     // layer.alert('編輯行:<br>'+ JSON.stringify(data))
      //跳轉
           layer.open({
          type: 2
          ,title: '編輯資料'
          ,content: "{:url('admin/example/edit_view')}"
          ,area: ['433px', '393px']
          ,btn: ['確定', '關閉']
          ,yes: function(index, layero){
            var iframeWindow = window['layui-layer-iframe'+ index]
            ,submitID = 'LAY-user-back-submit'
            ,submit = layero.find('iframe').contents().find('#'+ submitID);

            //監聽提交
            iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
              var field = data.field; //獲取提交的欄位

              //提交 Ajax 成功後,靜態更新表格中的資料
              //$.ajax({});
              table.reload('LAY-user-front-submit'); //資料重新整理
              layer.close(index); //關閉彈層
            });  

            submit.trigger('click');
          },
          success: function (layero, index) {
           // alert(JSON.stringify(data));
             //查詢資料傳遞
             var body = layer.getChildFrame('body', index);  
              var iframeWin = window[layero.find('iframe')[0]['name']];
              body.find("input[name='name']").val(data.name);
              body.find("input[name='sex']").each(function(index,item){                     
                    if(index == data.sex)
                    {
                      $(this).prop("checked","checked");
                    }
              });

              body.find("input[name='telephone']").val(data.telephone);  
              body.find("input[name='email']").val(data.email);  
              body.find("input[name='leader']").val(data.leader);  
              iframeWin.layui.form.render();//渲染才行
          }
        }); 



    }
  });

四 、 Table 中全選

Tabel需要進行批量刪除選中的資料時候,Table元件提供了這個簡單函式。很多時候,後臺刪除的時候需要指定對應id,於是在table選中的過程中提供了checkStatus的方法。然後獲取到data值,再通過遍歷迴圈一次,將選中的id 返回一個數組。
用於傳送給後端刪除使用。

  //獲取table選中的ID值
  function getSelectIds(){
    var checkStatus = table.checkStatus('testReload'),
        data = checkStatus.data,
        delList=[];
        data.forEach(function(n,i){
          delList.push(n.id);
        });
    return delList;
  }

五 、 Table 中批量刪除

選擇了對應的ID,有了這個組後,可以傳送後端進行刪除處理。

  var $ = layui.$, active = {

        batchdel:function(){
          //處理批量刪除
          var checkData =  getSelectIds();
          if(checkData.length === 0){
            return layer.msg('請選擇資料');
          }

          layer.confirm('確定刪除嗎?', function(index) {

            deleteData(checkData,function(){
                table.reload('testReload');
                layer.msg('已刪除');
            })});
        }

    }


//搜尋型別
 $('.demoTable .layui-btn').on('click', function(){
      var type = $(this).data('type');
      active[type] ? active[type].call(this) : '';
  });

   //刪除資料
  function deleteData(idArr,callback){

    $.post("{:url('admin/example/delete')}",{ids:idArr},function(data){
        if(data.code == 0)
        {
           callback();
        }else{
          layer.msg(data.msg)
        }  
    })

  }

六 、 按鈕型別定義

layui 有一個比較有趣的地方,在開始的時候一直看不懂,然後發現layui對按鈕加以一個型別方式,並且這個型別方式可以很巧妙結合一個回撥處理。從下面的程式碼可以看到 對按鈕定義一個button data-type 的型別,這個型別看起來只是一個常規dataset屬性,但藉助了這個可以很巧妙和監聽行為結合在一起。

<div class="demoTable">
   <button class="layui-btn" data-type="batchdel" >刪除</button>
   <button class="layui-btn" data-type="add">新增</button>
</div> 

監聽行為使用,通過jq監聽click時間,並且指明layui-btn這類按鈕。對一些有型別宣告的,可以呼叫call方法去完成一個函式排程。所以在這裡也是設計得很巧妙。

 $('.demoTable .layui-btn').on('click', function(){
      var type = $(this).data('type');
      active[type] ? active[type].call(this) : '';
  });

七 、 表格中彈窗

layui 裡面提供一個比較好用彈窗功能,這個彈窗元件使用的頻率比較高,可以結合模版頁面使用。使用的時候,先編輯一個表單頁面。當需要從視窗傳遞過去的時候,這個時候就要在success 回撥的時候 通過jq搜尋子視窗的表單進行傳遞數值。
當中也遇到了一些比較坑的地方。例如radio 使用prop,而不是attr 方式對其賦值。

          layer.open({
          type: 2
          ,title: '編輯資料'
          ,content: "{:url('admin/example/edit_view')}"
          ,area: ['433px', '393px']
          ,btn: ['確定', '關閉']
          ,yes: function(index, layero){
            var iframeWindow = window['layui-layer-iframe'+ index]
            ,submitID = 'LAY-user-back-submit'
            ,submit = layero.find('iframe').contents().find('#'+ submitID);

            //監聽提交
            iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
              var field = data.field; //獲取提交的欄位

              table.reload('LAY-user-front-submit'); //資料重新整理
              layer.close(index); //關閉彈層
            });  

            submit.trigger('click');
          },
          success: function (layero, index) {
           // alert(JSON.stringify(data));
             //查詢資料傳遞
             var body = layer.getChildFrame('body', index);  
              var iframeWin = window[layero.find('iframe')[0]['name']];
              body.find("input[name='name']").val(data.name);
              body.find("input[name='sex']").each(function(index,item){                     
                    if(index == data.sex)
                    {
                      $(this).prop("checked","checked");
                    }
              });

              body.find("input[name='telephone']").val(data.telephone);  
              body.find("input[name='email']").val(data.email);  
              body.find("input[name='leader']").val(data.leader);  
              iframeWin.layui.form.render();
          }
        }); 

製作過程,賦予資料的時候 有一些小坑,需要在新增render。官方文件據說有提及,怪自己沒詳情看。

    var body = layer.getChildFrame('body', index);  
    var iframeWin = window[layero.find('iframe')[0]['name']];

由於這兩句也在社群那裡獲取到,意為獲取iframe 的視窗。總體來講,完成一個table 的元件,需要經過很多js 編輯和 一些邏輯上的模版處理。所以這個流程先將其記錄下來。並用於日後使用。

這裡寫圖片描述

相關推薦

h5學習筆記layui table

最近在做Layui的後臺,發現Layui這個方案也不錯,能夠快速地在後臺直接部署。相比還要配置webpack,Layui jquery體系開箱即用在一些單獨的情況下還是挺不錯的。最近整理一下現在梳理一下Table元件的用法。 一 、Table 元件 Tabl

h5 學習筆記記錄一些前端用到後臺和移動樣式庫

這幾天一直在找一些移動和業務樣式庫,發現了不少不錯的,既是漂亮又符合業務用到。 前端發展真的變化很快,發現市面上還是有不少開源好用的產品。針對後臺研發的,有阿里ant design、阿里通訊的,還有餓了麼,京東,有贊等等一些庫。我比較喜歡ant design裡面

h5學習筆記 css佈局案例練習

今天練習一下css相關的佈局,沒有寫互動內容。在css佈局中,發現也不少不熟悉的地方。只是沒有形成概念,其次對一些用法比較模糊。日後需要加強一下這些。對平衡的兩個div應該如何處理,還要繼續想想辦法。

h5學習筆記居中

將之前的用到的記錄一下。以便不時之需。朋友一直和我講css 是不簡單,到目前為此,css發展已經進化到越來越驚人。其實學好css 不容易,也沒有人所說的那樣簡單。css2- css3 – 進化less,sass,postcss,似乎真是越來越多。那天看了一下le

h5學習筆記flex

flex部署可以很方便佈局橫向和垂直縱向的設計。所以在編寫小程式可以放心使用。 flex 依舊有瀏覽器相容性的問題。但是ie 8 這種瀏覽器真不管太多了。 今晚做一個練習,記錄一下之前工作中用到用法。flex是一種常用佈局方式,使用這種方式處理一些佈局。

h5學習筆記使用fis的前端構建工具記錄

這幾天練習一下webpack ,glup的工具使用,發現webpack 配置起來並不是太順利,總是有一種抗拒的,但從vuejs 和react 需要這種配套的方案去解決打包和釋出版本問題。這也是需要挖一下坑,把這塊骨頭啃下來。 無意中找到了fis百度的前端構建工

h5學習筆記vue 路由部署伺服器子目錄問題

《Egret 引擎入門》 這兩天一直在查詢vue經過打包後部署伺服器一直顯示不出來的問題。前端沒有報錯,資源載入也很正常。找了很多回答,最後定位在vue的訪問路由出了問題。 出現的現象 前端vuejs+vue-router+webpack的組合,打包是由w

h5學習筆記UI庫

自從接觸了web開發以來,每天都會很糾結選什麼UI框架才是比較合適?擺在這個問題面前是一個技術的選型。要想知道,web開發的坑實在太深。不斷地大廠推出開源框架,不斷地發現很多造輪子。或者看到一個比較漂亮就會選。 最近我深刻體會到這種矛盾的存在,前段時間一直用j

h5學習筆記http-server小工具

今天下午遇到一個小問題,下載的專案放置XAMPP二級目錄裡面,資源都會發生錯誤的情況,這個時候為了解決這個辦法,使用了fis3的內建伺服器去處理。 使用fis3伺服器也是挺方便的。 使用fis3的指令碼首先啟動伺服器,然後將檔案釋出到內建的伺服器。 fis

h5學習筆記 下拉選單

滑鼠經過選單的時候,下拉選單形成起來。這個案例中,有一些比較有趣的事情。 首先要了解這種選單設計結構。我們知道ul+li經常組合列表,這種列表既有縱向,也有橫向。列表中的li元素,再包一個ul+li的組合元素。這樣一個列表下拉選單結構就變得很清晰了。

h5學習筆記 Table

                     編寫一個表格作為練習。當中有個比較重要的樣式在學習過程中遇到,border-collapse: collapse; 能夠去除雙重的邊框。table可以合併單元格所以 對td屬性設定 colspan=”2” 則代表可以設定單元格。table 當中thead, tbody

Guava學習筆記Guava新集合-Table

  Table  當我們需要多個索引的資料結構的時候,通常情況下,我們只能用這種醜陋的Map<FirstName, Map<LastName, Person>>來實現。為此Guava提供了一個新的集合型別-Table集合型別,來支援這種資料結構的使用場景。Table支援“row”和“

Linux學習筆記存儲管理

linux 磁盤管理 Linux系統中所有的硬件設備都是通過文件的方式來表現和使用的,我們將這些文件稱為設備文件,在Linux下的/dev目錄中有大量的設備文件,根據設備文件的不同,又分為字符設備文件和塊設備文件。字符設備文件的存取是以字符流的方式來進行的,一次傳送一個字符。常見的有打印

學習筆記javascript內置對象數組對象

b- sort splice 刪除 分隔 href 結果 join() strong 1.數組對象的創建 1.設置一個長度為0的數組 var myarr=new array(); 2.設置一個長度為n的數組 var myarr=new arr(n); 3.聲明一個

學習筆記javascript內置對象日期對象

etsec sel mil cond ava com 描述 學習筆記 asp 2.日期對象的常用函數 2.日期對象的常用函數 Date 對象方法 方法描述 Date() 返回當日的日期和時間。 getDate() 從 Date 對象返回一個月

Linux學習筆記btrfs

可擴展性 linux btrfs Technical Preview, 技術預覽版 BtrFS(B-tree文件系統,又稱為Butter FS或Better FS),2007由oracle開源後,得到了IBM、intel等廠商的大力支持,其目標計劃是替代linux目前的ext3/4,成為下

Linux學習筆記rpm程序包管理

源代碼 rpm 程序包 以CentOS為例,rpm程序包管理器的相關內容如下:CentOS的程序包管理器: 程序包的命名規則: 源代碼包: software_name-VERSION.tar.gz VERSION:major.mino

kafka學習筆記知識點整理

一個 eight true med 分組 pos 間接 fig ges 一、為什麽需要消息系統 1.解耦:  允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。 2.冗余:   消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據

Emacs學習筆記移動

size exp http spc ssi 參考 put kill ati 參考網址:https://www.emacswiki.org/emacs/NavigatingParentheses Navigating over balanced expressions C

Linux學習筆記OSI七層模型

路由器 交換機 比特流 兼容性 linux OSI七層模型: OSI(Open System Interconnection,開放系統互連)七層網絡模型稱為開放式系統互聯參考模型 ,是一個邏輯上的定義,一個規範,它把網絡從邏輯上分為了7層。每一層都有相關、相對應的物理設備,比如路由器