layui表格中使用自定义templet模板

2024-06-11前端开发
191

我们在使用layui table展示数据时候,如果对一些字段不加特殊处理,前端表格直接显示数据库存储信息是不合适的,例如数据库有一个类型字段:0和1,0表示国产,1表示进口,前端显然不能直接显示0和1,而是应该根据后端返回的数字进行判断,展示相应的内容。layui table的自定义模板功能能非常方便地解决这个问题,首先看下效果图。

后端返回的完整数据:
{{
	"msg": "操作成功!",
	"code": "0",
	"data": [
		{
			"id": 1,
			"name": "iPhone",
			"type": "0",
			"price": 6000.0,
			"size": 55,
			"status": 0,
			"description": "说明"
		},
		{
			"id": 2,
			"name": "watch",
			"type": "1",
			"price": 500.0,
			"size": 35,
			"status": 1,
			"description": "说明"
		},
		{
			"id": 3,
			"name": "television",
			"type": "1",
			"price": 1000.0,
			"size": 90,
			"status": 1,
			"description": "说明"
		},
		{
			"id": 4,
			"name": "computer",
			"type": "1",
			"price": 4500.0,
			"size": 60,
			"status": 1,
			"description": "说明"
		}
	],
	"count": 4
}}

方式一:函数转义

所谓函数转义,就是在表格cols的对应列中直接写一段函数:
 

table.render({
    elem: '#goods_table'
    , id: 'goodsReload'
    , url: '/test/getGoodsInfo'
    , method: 'get'
    , title: '用户表'
    , toolbar: '#goods_headerBar' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
    , cols:
        [[{type: 'checkbox', fixed: true},
           {
            field: 'type',
            title: '类 型',
            width: 100,
            align: 'center',
            // data就是行数据:{"id": 1,"name": "iPhone","type": "1","price": 6000.0,"size": 55,"status": 0,"description": "说明"}
            templet: function (d) {
                var type = d.type;
                if (type == 0) {
                    return '<font color="#0000FF">国&ensp;产</font>';
                } else {
                    return '<font color="#5FB878">进&ensp;口</font>';
                }
            }
        }
        // 其他行省略,可去【前端系列-3】获得完整代码
        {
            fixed: 'right',
            title: '操作',
            toolbar: '#goos_lineBar',
            align: 'center',
            width: 120,
            style: 'font-size:13px'
        }
    ]]
});

这样的写法,简单直接,缺点是复用性差,有可能导致代码冗余。

方式二:绑定模版选择器

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

<script type="text/html" id="typeTpl">
    {{#  if(d.type ==0 ){ }}
    <p style="color: #0000FF">国&ensp;产</p>
    {{#  } else { }}
    <p style="color: #00FF00">进&ensp;口</p>
    {{#  } }}
</script>
table.render中的对应列templet内容中直接引用上面的模板即可
table.render({
    elem: '#goods_table'
    , id: 'goodsReload'
    , url: '/test/getGoodsInfo'
    , method: 'get'
    , title: '用户表'
    , toolbar: '#goods_headerBar' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
    , cols:
        [[{type: 'checkbox', fixed: true},
           {
                field: 'type',
                title: '类&emsp;型',
                width: 100,
                align: 'center',
                templet: '#typeTpl'
            }
           // 其他行省略,可去【前端系列-3】获得完整代码
           {
                fixed: 'right',
                title: '操作',
                toolbar: '#goos_lineBar',
                align: 'center',
                width: 120,
                style: 'font-size:13px'
            }
        ]]
});
这样的话,如果有多处表格使用同一个模板,代码复用性将得到加强。

还有一种方式:直接赋值模版字符
templet: '<div><a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a></div>'
注意:这里一定要被一层 <div></div> 包裹,否则无法读取到模板
The End

相关推荐

layui实现图片上传成功后回显点击放大图片功能
layui实现图片上传成功后回显点击放大图片功能,html代码部分: !-- html代码--div class="layui-form-item" label class="layui-form-label"上传图片/label div class="layui-input-block" button type="button" class="layui-btn" id="license-auth-letter-...
2025-09-06 前端开发
202

Layui实现数据表格中鼠标悬停图片放大离开时恢复原图
Layui实现数据表格中鼠标悬停图片放大离开时恢复原图的效果,最终效果如下图所示: 实现代码如下,在done函数中调用hoverOpenImg方法 var tableIns = window.demoTable = table .render({ elem : '#idTest', id : 'idTest', url : '/postData', //width : 150...
2025-09-04 前端开发
112

layui点击文本输入框调起弹出选择框并选择内容的两种方法参考
我们在用到layui时候,需要点击文本输入框调起弹出选择框并选择内容,这个要怎么操作呢?以下两种方法可以参考: 1、点击名称,弹出信息弹框,选择表格中的某一行,实现效果如下: html页面代码 !--计量器具弹出层-- div id="equipment" lay-filter="equipmen...
2025-09-02 前端开发
167

js拖拽排序插件Sortable.js如何使用
由于项目功能需要,要实现对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js 特点 轻量级但功能强大 移动列表项时有动画 支持触屏设备和大多数浏览器(IE9及以下除外) 支持...
2025-06-12 前端开发
161

xm-select多选下拉框实现拼音、首字母搜索匹配
最近项目中遇到需要下拉框能实现根据首字母进行模糊搜索,下拉框使用的是xm-select,而xm-select支持中文的搜索,后端接口也仅支持中文的。因此需要借助其他插件来完成功能。最终实现的效果如下: 涉及到的基础文件:引用 pinyin.js 和 initials.js。再引用 l...
2025-06-06 前端开发
89

Layui treetable复选框联动解决方案
我们都知道layui treetable.js没有checked做联动。我们要实现Layui treetable复选框联动要怎么操作呢?实现的最终效果如下: 1. 在当前HTML文档checked监听函数中增加以下代码: //联动 table.on('checkbox(quan_list)', function(obj){ //console.log(obj);...
2025-06-06 前端开发
163