zoukankan      html  css  js  c++  java
  • layui之表格数据

    1.实例

    创建一个table实例最简单的方式是,在页面放置一个元素 <table id="demo"></table>,然后通过 table.render() 方法指定该容器,如下所示:

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>table模块快速使用</title>
      <link rel="stylesheet" href="/layui/css/layui.css" media="all">
    </head>
    <body>
     
    <table id="demo" lay-filter="test"></table>
     
    <script src="/layui/layui.js"></script>
    <script>
    layui.use('table', function(){
      var table = layui.table;
      
      //第一个实例
      table.render({
        elem: '#demo'
        ,height: 312
        ,url: '/demo/table/user/' //数据接口
        ,page: true //开启分页
        ,cols: [[ //表头
          {field: 'id', title: 'ID', 80, sort: true, fixed: 'left'}
          ,{field: 'username', title: '用户名', 80}
          ,{field: 'sex', title: '性别', 80, sort: true}
          ,{field: 'city', title: '城市', 80} 
          ,{field: 'sign', title: '签名',  177}
          ,{field: 'experience', title: '积分',  80, sort: true}
          ,{field: 'score', title: '评分',  80, sort: true}
          ,{field: 'classify', title: '职业',  80}
          ,{field: 'wealth', title: '财富',  135, sort: true}
        ]]
      });
      
    });
    </script>
    </body>
    </html>
    View Code

    2.方法渲染

    将基础参数的设定放在了JS代码中,且原始的 table 标签只需要一个 选择器

    <table id="demo" lay-filter="test"></table>
    var table = layui.table;
     
    //执行渲染
    table.render({
      elem: '#demo' //指定原始表格元素选择器(推荐id选择器)
      ,height: 315 //容器高度
      ,cols: [{}] //设置表头
      //,…… //更多参数参考右侧目录:基本参数选项
    });

    3.自动渲染

    在一段 table 容器中配置好相应的参数,由 table 模块内部自动对其完成渲染,而无需你写初始的渲染方法。其特点在上文也有阐述。你需要关注的是以下三点:

    1) 带有 class="layui-table" 的 <table> 标签。
    2) 对标签设置属性 lay-data="" 用于配置一些基础参数
    3) 在 <th> 标签中设置属性lay-data=""用于配置表头信息

    <table class="layui-table" lay-data="{height:315, url:'/demo/table/user/', page:true, id:'test'}" lay-filter="test">
      <thead>
        <tr>
          <th lay-data="{field:'id', 80, sort: true}">ID</th>
          <th lay-data="{field:'username', 80}">用户名</th>
          <th lay-data="{field:'sex', 80, sort: true}">性别</th>
          <th lay-data="{field:'city'}">城市</th>
          <th lay-data="{field:'sign'}">签名</th>
          <th lay-data="{field:'experience', sort: true}">积分</th>
          <th lay-data="{field:'score', sort: true}">评分</th>
          <th lay-data="{field:'classify'}">职业</th>
          <th lay-data="{field:'wealth', sort: true}">财富</th>
        </tr>
      </thead>
    </table>

    4.转换静态表格

    可通过init方法转换

    <table lay-filter="demo">
      <thead>
        <tr>
          <th lay-data="{field:'username', 100}">昵称</th>
          <th lay-data="{field:'experience', 80, sort:true}">积分</th>
          <th lay-data="{field:'sign'}">签名</th>
        </tr> 
      </thead>
      <tbody>
        <tr>
          <td>贤心1</td>
          <td>66</td>
          <td>人生就像是一场修行a</td>
        </tr>
        <tr>
          <td>贤心2</td>
          <td>88</td>
          <td>人生就像是一场修行b</td>
        </tr>
        <tr>
          <td>贤心3</td>
          <td>33</td>
          <td>人生就像是一场修行c</td>
        </tr>
      </tbody>
    </table>
    View Code

    执行js方法就可以了

    var table = layui.table;
     
    //转换静态表格
    table.init('demo', {
      height: 315 //设置高度
      ,limit: 10 //注意:请务必确保 limit 参数(默认:10)是与你服务端限定的数据条数一致
      //支持所有基础参数
    }); 
        

    5.基础参数

    1.elem:指定原始 table 容器的选择器或 DOM,方法渲染方式必填

    2.cols:设置表头。值是一个二维数组。方法渲染方式必填

    3.url:异步数据接口相关参数。其中 url 参数为必填项

    4.toolbar:开启表格头部工具栏区域,该参数支持四种类型值:

    • toolbar: '#toolbarDemo' //指向自定义工具栏模板选择器
    • toolbar: '<div>xxx</div>' //直接传入工具栏模板字符
    • toolbar: true //仅开启工具栏,不显示左侧模板
    • toolbar: 'default' //让工具栏左侧显示默认的内置模板

    5.defaultToolbar:该参数可自由配置头部工具栏右侧的图标按钮

    6.设定容器宽度。table容器的默认宽度是跟随它的父元素铺满,你也可以设定一个固定值,当容器中的内容超出了该宽度时,会自动出现横向滚动条。

    7.height:设定容器高度,string/number

    8.cellMinWidth:全局定义所有常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级低于表头参数中的 minWidth

    9.done:数据渲染完的回调。你可以借此做一些其它的操作

    10.data:直接赋值数据。既适用于只展示一页数据,也非常适用于对一段已知数据进行多页展示。

    11.totalRow:是否开启合计行区域。

    12.page:开启分页(默认:false)

    13.limit:每页显示的条数(默认:10)

    14.limits:每页条数的选择项,默认:[10,20,30,40,50,60,70,80,90]。
    注意:优先级低于 page 参数中的 limits 参数

    15.loading:是否显示加载条(默认:true)。如果设置 false,则在切换分页时,不会出现加载条。该参数只适用于 url 参数开启的方式

    16.title:定义 table 的大标题(在文件导出等地方会用到)

    17.text:自定义文本,如空数据时的异常提示等。

    18.autoSort:默认 true,即直接由 table 组件在前端自动处理排序。
    若为 false,则需自主排序,通常由服务端直接返回排序好的数据。

    19.initSort:初始排序状态。用于在数据表格渲染完毕时,默认按某个字段排序。

    20.id:设定容器唯一 id。id 是对表格的数据操作方法上是必要的传递条件,它是表格容器的索引,你在下文诸多地方都将会见识它的存在。

    21.skin:设定表格各种外观、尺寸等

    6.表头参数

    如果你采用的是方法渲染,cols 是一个二维数组,表头参数设定在数组内;如果你采用的自动渲染,表头参数的设定应放在 <th> 标签上

    1.field:设定字段名。字段名的设定非常重要,且是表格数据列的唯一标识

    2.title:设定标题名称

    3.width:设定列宽,若不填写,则自动分配;若填写,则支持值为:数字、百分比
    请结合实际情况,对不同列做不同设定。

    4.minWidth:局部定义当前常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级高于基础参数中的 cellMinWidth

    5.type:设定列类型。可选值有:

    • normal(常规列,无需设定)
    • checkbox(复选框列)
    • radio(单选框列,layui 2.4.0 新增)
    • numbers(序号列)
    • space(空列)

    6.LAY_CHECKED:是否全选状态(默认:false)。必须复选框列开启后才有效,如果设置 true,则表示复选框默认全部选中。

    7.fixed:固定列。可选值有:left(固定在左)、right(固定在右)。一旦设定,对应的列将会被固定在左或右,不随滚动条而滚动。

    8.hide:是否初始隐藏列,默认:false。

    9.totalRow:是否开启该列的自动合计功能,默认:false。

    10.totalRowText:用于显示自定义的合计文本。

    11.sort:是否允许排序(默认:false)。如果设置 true,则在对应的表头显示排序icon,从而对列开启排序功能。

    12.unresize:是否禁用拖拽列宽(默认:false)。默认情况下会根据列类型(type)来决定是否禁用,如复选框列,会自动禁用。而其它普通列,默认允许拖拽列宽,当然你也可以设置 true 来禁用该功能。

    13.edit:单元格编辑类型(默认不开启)目前只支持:text(输入框)

    14.event:自定义单元格点击事件名,以便在 tool 事件中完成对该单元格的业务处理

    15.style:自定义单元格样式。即传入 CSS 样式

    16.align:单元格排列方式。可选值有:left(默认)、center(居中)、right(居右)

    17.colspan:单元格所占列数(默认:1)。一般用于多级表头

    18.rowspan:单元格所占行数(默认:1)。一般用于多级表头

    19.templet:自定义列模板,模板遵循 laytpl 语法。这是一个非常实用的功能,你可借助它实现逻辑处理,以及将原始数据转化成其它格式,如时间戳转化为日期字符等

     20.toolbar:绑定工具条模板。可在每行对应的列中出现一些自定义的操作性按钮

    7.自定义列模板

    在默认情况下,单元格的内容是完全按照数据接口返回的content原样输出的,如果你想对某列的单元格添加链接等其它元素,你可以借助该参数来轻松实现。这是一个非常实用且强大的功能,你的表格内容会因此而丰富多样。

     方式一:绑定模版选择器。

    table.render({
      cols: [[
        {field:'title', title: '文章标题',  200, templet: '#titleTpl'} //这里的templet值是模板元素的选择器
        ,{field:'id', title:'ID', 100}
      ]]
    });
     
    等价于:
    <th lay-data="{field:'title',  200, templet: '#titleTpl'}">文章标题</th>
    <th lay-data="{field:'id', 100}">ID</th>

    下述是templet对应的模板,它可以存放在页面的任意位置。模板遵循于 laytpl 语法,可读取到返回的所有数据

    <script type="text/html" id="titleTpl">
      <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>
    </script>
     
    注意:上述的 {{d.id}}、{{d.title}} 是动态内容,它对应数据接口返回的字段名。除此之外,你还可以读取到以下额外字段:
         序号:{{ d.LAY_INDEX }} 
     
    由于模板遵循 laytpl 语法(建议细读 laytpl文档 ),因此在模板中你可以写任意脚本语句(如 if else/for等):
    <script type="text/html" id="titleTpl">
      {{#  if(d.id < 100){ }}
        <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>
      {{#  } else { }}
        {{d.title}}(普通用户)
      {{#  } }}
    </script>

    方式二:函数转义。templet 支持函数形式,函数返回一个参数 d,包含接口返回的所有字段和数据。如下所示:

    table.render({
      cols: [[
        {field:'title', title: '文章标题',  200
          ,templet: function(d){
            return 'ID:'+ d.id +',标题:<span style="color: #c00;">'+ d.title +'</span>'
          }
        }
        ,{field:'id', title:'ID', 100}
      ]]
    });  

    方式三:直接赋值模版字符。事实上,templet 也可以直接是一段 html 内容,如:

    templet: '<div><a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a></div>'
     
    注意:这里一定要被一层 <div></div> 包裹,否则无法读取到模板

    8.绑定工具条模板toolbar

    类型:String,默认值:无,通常你需要在表格的每一行加上 查看、编辑、删除 这样类似的操作按钮,而 tool 参数就是为此而生,你因此可以非常便捷地实现各种操作功能。tool 参数和 templet 参数的使用方式完全类似,通常接受的是一个选择器,也可以是一段HTML字符。

    下述是 toolbar 对应的模板,它可以存放在页面的任意位置:

    <script type="text/html" id="barDemo">
      <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
      <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>
      
      <!-- 这里同样支持 laytpl 语法,如: -->
      {{#  if(d.auth > 2){ }}
        <a class="layui-btn layui-btn-xs" lay-event="check">审核</a>
      {{#  } }}
    </script>
     
    注意:属性 lay-event="" 是模板的关键所在,值可随意定义。
    //监听工具条 
    table.on('tool(test)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
      var data = obj.data; //获得当前行数据
      var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
      var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)
     
      if(layEvent === 'detail'){ //查看
        //do somehing
      } else if(layEvent === 'del'){ //删除
        layer.confirm('真的删除行么', function(index){
          obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
          layer.close(index);
          //向服务端发送删除指令
        });
      } else if(layEvent === 'edit'){ //编辑
        //do something
        
        //同步更新缓存对应的值
        obj.update({
          username: '123'
          ,title: 'xxx'
        });
      } else if(layEvent === 'LAYTABLE_TIPS'){
        layer.alert('Hi,头部工具栏扩展的右侧图标。');
      }
    });

    9.异步数据接口

    数据的异步请求由以下几个参数组成

    url:接口地址。默认会自动传递两个参数:?page=1&limit=30(该参数可通过 request 自定义)
    page 代表当前页码、limit 代表每页数据量

    method:接口http请求类型,默认:get

    where:接口的其它参数。如:where: {token: 'sasasas', id: 123}

     contentType:发送到服务端的内容编码类型。如果你要发送 json 内容,可以设置:contentType: 'application/json'

    headers:接口的请求头。如:headers: {token: 'sasasas'}

     parseData:数据格式解析的回调函数,用于将返回的任意数据格式解析成 table 组件规定的数据格式假设你接口返回的数据为以下格式

    {
      "status": 0,
      "message": "", 
      "total": 180, 
      "data": {
        "item": [{}, {}]
      }
    }
    table.render({
      elem: '#demp'
      ,url: ''
      ,parseData: function(res){ //res 即为原始返回的数据
        return {
          "code": res.status, //解析接口状态
          "msg": res.message, //解析提示文本
          "count": res.total, //解析数据长度
          "data": res.data.item //解析数据列表
        };
      }
      //,…… //其他参数
    });  

    request:用于对分页请求的参数:page、limit重新设定名称,如:

    table.render({
      elem: '#demp'
      ,url: ''
      ,request: {
        pageName: 'curr' //页码的参数名称,默认:page
        ,limitName: 'nums' //每页数据量的参数名,默认:limit
      }
      //,…… //其他参数
    });    

    那么请求数据时的参数将会变为:?curr=1&nums=30

    response:如果你想重新规定返回的数据格式,那么可以借助 response 参数,如:

    table.render({
      elem: '#demp'
      ,url: ''
      ,response: {
        statusName: 'status' //规定数据状态的字段名称,默认:code
        ,statusCode: 200 //规定成功的状态码,默认:0
        ,msgName: 'hint' //规定状态信息的字段名称,默认:msg
        ,countName: 'total' //规定数据总数的字段名称,默认:count
        ,dataName: 'rows' //规定数据列表的字段名称,默认:data
      } 
      //,…… //其他参数
    });     

    10.数据渲染完的回调

    无论是异步请求数据,还是直接赋值数据,都会触发该回调。可以利用该回调做一些表格以外元素的渲染。

    table.render({ //其它参数在此省略
      done: function(res, curr, count){
        //如果是异步请求数据方式,res即为你接口返回的信息。
        //如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
        console.log(res);
        
        //得到当前页码
        console.log(curr); 
        
        //得到数据总量
        console.log(count);
      }
    });

    11.头部工具栏右侧图标defaultToolbar

    类型:Array,默认值:["filter","exports","print"]

    该参数可自由配置头部工具栏右侧的图标按钮,值为一个数组,支持以下可选值:
    • filter: 显示筛选图标
    • exports: 显示导出图标
    • print: 显示打印图标
    table.render({ //其它参数在此省略      
      defaultToolbar: ['filter', 'print', 'exports', {
        title: '提示' //标题
        ,layEvent: 'LAYTABLE_TIPS' //事件名,用于 toolbar 事件中使用
        ,icon: 'layui-icon-tips' //图标类名
      }]
    });

    12.自定义文本text

    table 模块会内置一些默认的文本信息,如果想修改,你可以设置以下参数达到目的。

    table.render({ //其它参数在此省略
      text: {
        none: '暂无相关数据' //默认:无数据。注:该属性为 layui 2.2.5 开始新增
      }
    });

    13.初始排序initSort

    用于在数据表格渲染完毕时,默认按某个字段排序。

    //“方法级渲染”配置方式
    table.render({ //其它参数在此省略
      initSort: {
        field: 'id' //排序字段,对应 cols 设定的各字段名
        ,type: 'desc' //排序方式  asc: 升序、desc: 降序、null: 默认排序
      }
    });
     
    等价于(“自动化渲染”配置方式)
    <table class="layui-table" lay-data="{initSort:{field:'id', type:'desc'}}" lay-filter="test"> …… </table>

    14.表格外观

    skin:line (行边框风格)row (列边框风格)nob (无边框风格) 用于设定表格风格,若使用默认风格不设置该属性即可

    even:true/false     若不开启隔行背景,不设置该参数即可

    size:lg/sm     用于设定表格尺寸,若使用默认尺寸不设置该属性即可

    15.获取选中行

    语法:table.checkStatus('ID'),其中 ID 为基础参数 id 对应的值

    【自动化渲染】
    <table class="layui-table" lay-data="{id: 'idTest'}"> …… </table>
     
    【方法渲染】
    table.render({ //其它参数省略
      id: 'idTest'
    });
    var checkStatus = table.checkStatus('idTest'); //idTest 即为基础参数 id 对应的值
     
    console.log(checkStatus.data) //获取选中行的数据
    console.log(checkStatus.data.length) //获取选中行数量,可作为是否有选中行的条件
    console.log(checkStatus.isAll ) //表格是否全选

    16.监听复选框选中

    table.on('checkbox(test)', function(obj){
      console.log(obj.checked); //当前是否选中状态
      console.log(obj.data); //选中行的相关数据
      console.log(obj.type); //如果触发的是全选,则为:all,如果触发的是单选,则为:one
    });



    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    Add Two Numbers
    Reverse Linked List II
    Reverse Linked List
    Remove Duplicates from Sorted List
    Remove Duplicates from Sorted List II
    Partition List
    Intersection of Two Linked Lists
    4Sum
    3Sum
    2Sum
  • 原文地址:https://www.cnblogs.com/fqh2020/p/11970961.html
Copyright © 2011-2022 走看看