采用layui框架实现表格的简单制作

摘要:
最近,我想使用layui来完成项目,研究并记录它。数据源案例放在new1.json文件中。使用layui框架返回的数据必须符合其格式,否则将报告请求数据错误。首先,前面的插图显示,效果仍然很好。让我们看看如何实现它。首先,制作准备资源。这里我们主要下载layui文件,因为我们需要使用两个文件,layui.css和layui.js。

 最近想把项目用layui来做,研究了下并记录下来,数据源这个案例放到了new1.json文件中,使用layui框架返回的数据必须按照他们的格式,否则会报请求数据错误。

先上一张展示图:

采用layui框架实现表格的简单制作第1张

效果还是很好看的,看下如何实现的吧

1、首先做个准备资源

这里主要下载layui文件,因为需要用到其中的layui.css与layui.js这两个文件。

<link rel="stylesheet" href="layui/css/layui.css" media="all">
<script src="layui/layui.js"></script>
<!--这里要改成自己的资源路径-->

2、body部分只需要加入<table>标签,若想在行的尾部加上编辑|修改其他操作,这里还需要添加<script>组件(也是没看懂,照着做吧),如

<body>

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

        <script type="text/html" id="barDemo">
            <a class="layui-btn layui-btn-primary 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>
        </script>

</body>

3、下面就是js部分(重点)

3-1、预先加载

layui.use('table', function() {
    var table = layui.table; //表格
}

这里采用layui.use(mods,callback)方法来实现预先加载,本次案例只使用表格,如还有其他的,如:日期、轮播、上传等多个模块,就要使用数组,代码是这样的

layui.use(['laydate', 'laypage', 'table', 'carousel', 'upload', 'element'], function() {
                var laydate = layui.laydate, //日期
                    laypage = layui.laypage, //分页
                    table = layui.table, //表格
                    carousel = layui.carousel, //轮播
                    upload = layui.upload, //上传
                    element = layui.element //元素操作
}

接下来在对每个模块执行如监听事件:

//监听 头 工具栏事件
            table.on('toolbar(test)', function(obj) {
                var checkStatus = table.checkStatus(obj.config.id),
                    data = checkStatus.data; //获取选中的数据
                switch(obj.event) {
                    case 'add':
                        layer.msg('添加');
                        break;
                    case 'update':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else if(data.length > 1) {
                            layer.msg('只能同时编辑一个');
                        } else {
                            layer.alert('编辑 [id]:' + checkStatus.data[0].id);
                        }
                        break;
                    case 'delete':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else {
                            layer.msg('删除');
                        }
                        break;
                };
            });

3-2、对表格进行渲染 table.render()方法

            //执行一个 table 实例
            table.render({
                elem: '#demo',
                height: 600,
                url: 'new.json',//数据接口
                title: '用户表',
                page: true, //开启分页
                toolbar: 'default' ,//开启工具栏,此处显示默认图标,可以自定义模板,详见文档,
                totalRow: true ,//开启合计行
                cols: [//表头
                    [ 
                        { type: 'checkbox', fixed: 'left' }, 
                        { field: 'id', title: 'ID',  80, sort: true }, 
                        { 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 }, 
                        { fixed: 'right',  378, align: 'center', toolbar: '#barDemo' }
                    ]
                ]
            });

这里含有许多参数,详解请看layui官方文档,这里就不做详细介绍了,提醒的是,

采用layui框架实现表格的简单制作第2张

设置表头时,field:'属性名',若是后台要与类的属性名一一对应。

3-3、这里的url请求的数据接口,没有从后台获取,这里给的json格式的文件

new1.json

采用layui框架实现表格的简单制作第3张采用layui框架实现表格的简单制作第4张
{
    "code": 0,
    "msg": "",
    "count": 100,
    "data": [
        {
            "id": 10000,
            "username": "user-0",
            "sex": "女",
            "city": "城市-0",
            "sign": "签名-0",
            "experience": 255,
            "logins": 24,
            "wealth": 82830700,
            "classify": "作家",
            "score": 57
        }, {
            "id": 10001,
            "username": "user-1",
            "sex": "男",
            "city": "城市-1",
            "sign": "签名-1",
            "experience": 884,
            "logins": 58,
            "wealth": 64928690,
            "classify": "词人",
            "score": 27
        }, {
            "id": 10002,
            "username": "user-2",
            "sex": "女",
            "city": "城市-2",
            "sign": "签名-2",
            "experience": 650,
            "logins": 77,
            "wealth": 6298078,
            "classify": "酱油",
            "score": 31
        }, {
            "id": 10003,
            "username": "user-3",
            "sex": "女",
            "city": "城市-3",
            "sign": "签名-3",
            "experience": 362,
            "logins": 157,
            "wealth": 37117017,
            "classify": "诗人",
            "score": 68
        }, {
            "id": 10004,
            "username": "user-4",
            "sex": "男",
            "city": "城市-4",
            "sign": "签名-4",
            "experience": 807,
            "logins": 51,
            "wealth": 76263262,
            "classify": "作家",
            "score": 6
        }, {
            "id": 10005,
            "username": "user-5",
            "sex": "女",
            "city": "城市-5",
            "sign": "签名-5",
            "experience": 173,
            "logins": 68,
            "wealth": 60344147,
            "classify": "作家",
            "score": 87
        }, {
            "id": 10006,
            "username": "user-6",
            "sex": "女",
            "city": "城市-6",
            "sign": "签名-6",
            "experience": 982,
            "logins": 37,
            "wealth": 57768166,
            "classify": "作家",
            "score": 34
        }, {
            "id": 10007,
            "username": "user-7",
            "sex": "男",
            "city": "城市-7",
            "sign": "签名-7",
            "experience": 727,
            "logins": 150,
            "wealth": 82030578,
            "classify": "作家",
            "score": 28
        }, {
            "id": 10008,
            "username": "user-8",
            "sex": "男",
            "city": "城市-8",
            "sign": "签名-8",
            "experience": 951,
            "logins": 133,
            "wealth": 16503371,
            "classify": "词人",
            "score": 14
        }, {
            "id": 10009,
            "username": "user-9",
            "sex": "女",
            "city": "城市-9",
            "sign": "签名-9",
            "experience": 484,
            "logins": 25,
            "wealth": 86801934,
            "classify": "词人",
            "score": 75
        }, {
            "id": 10010,
            "username": "user-10",
            "sex": "女",
            "city": "城市-10",
            "sign": "签名-10",
            "experience": 1016,
            "logins": 182,
            "wealth": 71294671,
            "classify": "诗人",
            "score": 34
        }
    ]
}
View Code

这里只给出10条数据,格式要严格按照这个来,后台返回的数据也要为这种格式的,无论是用何种框架,采用何种方法读取数据库内容,只要提取出来的数据正确,都可以运用layui

对其中代码解释下:

"code":0   -数据状态的字段名称(默认),这里必须是0,0代表成功,其他数值均代表错误

"msg":""  -状态信息(默认值)

"count":100  -数据总数,根据情况自行而定

"data":[{},{}]  -数据列表的字段名称(默认为data)

3-4、设置表头的监听事件

采用layui框架实现表格的简单制作第5张

//监听 头 工具栏事件
            table.on('toolbar(test)', function(obj) {
                var checkStatus = table.checkStatus(obj.config.id),
                    data = checkStatus.data; //获取选中的数据
                switch(obj.event) {
                    case 'add':
                        layer.msg('添加');
                        break;
                    case 'update':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else if(data.length > 1) {
                            layer.msg('只能同时编辑一个');
                        } else {
                            layer.alert('编辑 [id]:' + checkStatus.data[0].id);
                        }
                        break;
                    case 'delete':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else {
                            layer.msg('删除');
                        }
                        break;
                };
            });

3-5、对行的操作设置监听事件

采用layui框架实现表格的简单制作第6张

//监听 行 工具事件
            table.on('tool(test)', function(obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
                var data = obj.data ,//获得当前行数据
                    layEvent = obj.event; //获得 lay-event 对应的值
                if(layEvent === 'detail') {
                    layer.msg('查看操作');
                } else if(layEvent === 'del') {
                    layer.confirm('真的删除行么', function(index) {
                        obj.del(); //删除对应行(tr)的DOM结构
                        layer.close(index);
                        //向服务端发送删除指令
                    });
                } else if(layEvent === 'edit') {
                    layer.msg('编辑操作:<br>' + JSON.stringify(data));
                }
            });

到这里解析结束,杂乱啊,还是思路没理清,还要研究好久啊

4、附上完整的代码吧

采用layui框架实现表格的简单制作第7张采用layui框架实现表格的简单制作第8张
<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <title>layui在线调试</title>
        <link rel="stylesheet" href="layui/css/layui.css" media="all">
        <!--这里要改成自己的资源路径-->
        <style>
            body {
                margin: 20px;
            }
        </style>
    </head>

    <body>

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

        <script type="text/html" id="barDemo">
            <a class="layui-btn layui-btn-primary 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>
        </script>

    </body>
    <script src="layui/layui.js"></script>
    <!--这里要改成自己的资源路径-->
    <script>
        layui.use('table', function() {
            var table = layui.table; //表格

            //向世界问个好
            layer.msg('Hello World');

            //执行一个 table 实例
            table.render({
                elem: '#demo',
                height: 600,
                url: 'new1.json',//数据接口
                title: '用户表',
                page: true, //开启分页
                toolbar: 'default' ,//开启工具栏,此处显示默认图标,可以自定义模板,详见文档,
                totalRow: true ,//开启合计行
                cols: [//表头
                    [ 
                        { type: 'checkbox', fixed: 'left' }, 
                        { field: 'id', title: 'ID',  80, sort: true }, 
                        { 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 }, 
                        { fixed: 'right',  378, align: 'center', toolbar: '#barDemo' }
                    ]
                ]
            });

            //监听 头 工具栏事件
            table.on('toolbar(test)', function(obj) {
                var checkStatus = table.checkStatus(obj.config.id),
                    data = checkStatus.data; //获取选中的数据
                switch(obj.event) {
                    case 'add':
                        layer.msg('添加');
                        break;
                    case 'update':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else if(data.length > 1) {
                            layer.msg('只能同时编辑一个');
                        } else {
                            layer.alert('编辑 [id]:' + checkStatus.data[0].id);
                        }
                        break;
                    case 'delete':
                        if(data.length === 0) {
                            layer.msg('请选择一行');
                        } else {
                            layer.msg('删除');
                        }
                        break;
                };
            });
            //监听 行 工具事件
            table.on('tool(test)', function(obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
                var data = obj.data ,//获得当前行数据
                    layEvent = obj.event; //获得 lay-event 对应的值
                if(layEvent === 'detail') {
                    layer.msg('查看操作');
                } else if(layEvent === 'del') {
                    layer.confirm('真的删除行么', function(index) {
                        obj.del(); //删除对应行(tr)的DOM结构
                        layer.close(index);
                        //向服务端发送删除指令
                    });
                } else if(layEvent === 'edit') {
                    layer.msg('编辑操作:<br>' + JSON.stringify(data));
                }
            });
        });
    </script>

</html>
View Code

写的很不好,还要再努力学习中,具体说明请看layui的官方文档:https://www.layui.com/doc/modules/util.html

layui文件下载:https://www.layui.com/

免责声明:文章转载自《采用layui框架实现表格的简单制作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle中的关键字paddleocr下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

lua中table的遍历,以及删除

Lua 内table遍历 在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 1. ipairs for index, value in ipairs(table) do end 注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面...

夺命雷公狗---node.js---9实现页面的跳转

废话不多说,我们先来看看项目的文件结构,如下所示: 然后我们创建一个index.js的文件让他来做端口监听,代码如下所示: var http = require('http'); var fs = require('fs'); var url = require('url'); FILE = "d:/node/code/http"; http.cr...

MySQL排序原理与MySQL5.6案例分析【转】

本文来自:http://www.cnblogs.com/cchust/p/5304594.html,其中对于自己觉得是重点的加了标记,方便自己查阅。更多详细的说明可以看沃趣科技的文章说明。 前言      排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Gr...

Kudu存储实战笔记

有人会问,为啥要用这个叫啥Kudu的,Kudu是啥? 就像官网所说,Kudu是一个针对Apache hadoop 平台而开发的列式存储管理器,在本菜鸟看来,它是一种介于hdfs与hbase的一种存储。它的优势在于: 1、OLAP工作的快速处理,也就是针对于查询,很快,很牛逼。 2、针对同时运行顺序和随机工作负载的情况性能很好。 3、高可用,Table se...

Vue数据更新但页面没有更新的多种情况

Vue数据更新但页面没有更新的多种情况 1、Vue 无法检测实例被创建时不存在于 data 中的 变量 原因:由于 Vue 会在初始化实例时对 data中的数据执行 getter/setter 转化,所以 变量必须在 data 对象上存在才能让 Vue 将它转换为响应式的。 例如: new Vue({ data:{}, template: '&l...

一个专门下载全球气象站数据的网站(包括中国700多个站)

我只是搬运工。。。 1.我也下载了,好像不能超过500M每次,100个站。下了也不会看。有没有高手能介绍下专门下载某个省的所有气象站气温资料的方法,从而计算出每个站每月的平均气温。。格式为txt。2 http://www.esrl.noaa.gov/psd/data/gridded/reanalysis/网站可以下载气象数据,.nc格式,同样不会用,不会打...