Layui小知识

Layui

layui是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,基本都是套用内容。但是想用它,必须要按照他的规矩来,毕竟拿人的手短。

预先加载模块

layui 通过 use 方法加载模块。当你的 JS 需要用到 layui 模块的时候,且避免到处写 layui.use() 的麻烦。你应该在最外层如此定义:

layui.use(['form', 'upload'], function(){  
    //如果只加载一个模块,可以不填数组。如:layui.use('form')
      var form = layui.form //获取form模块
      var upload = layui.upload; //获取upload模块
​
      //监听提交按钮
      form.on('submit(test)', function(data){
        console.log(data);
      });
});

获取模块的命名规则

layui.use(['form', 'upload'], function(){  
    var a=layui.a;
})

交互数据格式

layui有自己的一套特定的数据格式交互,而且必须有值

默认的数据格式

字段说明
code状态码(成功 0,失败其他)int
msg错误提示string
count总数int
data实体对象的集合object[]

也就是说你从后台返回的值必须是下面这个样子的

{
  "code": 0,
  "msg": "",
  "count": 1000,
  "data": [{}, {}]
} 

其他情况

如果你的字段名称不同于默认的字段,需要借助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 //解析数据列表
    };
  }
}); 

拼接

在使用Layui对表格进行渲染的过程中,你可能会遇到多个字段放在同一栏的情况,这时候就需要使用拼接,这里直接使用代码演示。

//多个字段拼接
{field:'area',title:'房屋名称', width:200,  
    templet:function (d) {      //templet可以进行方法的编写
        return d.area + '-' + d.ased + '-' + d.aasd;
        // return d.area+"我是啦啦啦";   //拼接字符
    }
}

模板templet

layui中有很多模板,但是这些模板并不能完全满足于我们的需求,就比如我们想要展示一些数据,但是这些数据不是我们想要的数据或者不是我们想要的样子,我们就可以通过templet在前台进行更改。

就比如我们从后台传输过来的日期格式是String,但这个String中存储的却是时间戳。

//时间戳:1635264000        时间:2021-10-27
//这就是在表格中将时间戳1635264000转化为了2021-10-27
templet: "<div>{{layui.util.toDateString(1635264000,'yyyy-MM-dd')}}</div>"
​
​
//在正式使用中,你可以将1635264000换成你的字段名,这样的话可以将你的字段的值自动转化
//这里我就是将我的ctime转换成了日期格式
field:'ctime', title:'签署时间', width:200,
    templet: "<div>{{layui.util.toDateString(d.ctime,'yyyy-MM-dd')}}</div>"

弹窗

基础语法

layui.use('layer',function(){
    var layui = layui.layer;
    layer,msg('HELLO WORLD');
})

弹窗嵌套

这里说下type的意思 他代表着你弹出层的类型 共5个数字

  • 0是默认 一般是信息

  • 1是页面层 一般弹出写好的html代码

  • 2是iframe层 这里内容是一个地址 ,引入别的页面 注意:这里的地址是controller的地址

  • 3是加载层 一般是加载动画

  • 4是tips层 一般是弹出提示

//使用方式
table.on('tool(test)', function(obj){
    var data = obj.data;
    if(obj.event === 'det'){
        open("详情页面",'/static/view/contract/details.html?cid='+data.cid);
     } else if(obj.event === 'upd'){
        open("修改页面","/static/view/contract/update.html?cid="+data.cid);
     }                         
});
​
​
function open (title,url) {
    layer.open({
        type: 2,                          //  2 - url
        content: url,         // 弹出层的 url []不出现滚动,'no'
        area: ["400px", "530px"],         //  大小
        title: title,               //  定义弹出层名称 
        fixed: false,                     //  鼠标滚动时,层是否固定在可视区域
        //maxmin: true,                   //  最大小化按钮
        shadeClose: true,                 //是否点击遮罩关闭
        cancel: function () {             //请求回调,右上角关闭执行return false开启该代码可禁止点击该按钮关闭
        }, success: function (layero, index) {  //请求回调,打开窗口时执行
        }, end: function () {                   //请求回调,窗口销毁时执行
            location.reload();                  //窗口销毁时刷新主页面数据
        }
    })
}

表格

​
<table class="layui-hide" id="test" lay-filter="test"></table>
layui.use('table', function(){
        var table = layui.table;
        var $=layui.$;      
        table.render({
            elem: '#test'  
            ,url:'/ContractServlet?method=queryAll'  
            ,method: 'post' 
            ,page: true //开启分页
            ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
            ,id:'testReload'
            ,title: '用户数据表'
            ,cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field:'cid', title:'ID', width:80,  unresize: true, sort: true}
                ,{field:'harea',title:'房屋名称', width:200}
                ,{field:'lname', title:'租户名称', width:200} //edit: 'text'   开启页面修改
                ,{field:'crental', title:'总金额', width:100}
                ,{field:'ccash', title:'押金', width:100}
                ,{field:'cname', title:'签署人', width:200}
                ,{field:'ctime', title:'签署时间', width:200,
                    templet: "<div>{{layui.util.toDateString(d.ctime,'yyyy-MM-dd')}}</div>"
                }
                ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:200}
            ]]
            , parseData: function (rs) {//数据格式解析
                console.log(rs);
                if (rs.code == 0) {
                    return {
                        "code": rs.code,
                        "msg": rs.msg,
                        "count": rs.data.totalCount,
                        "data": rs.data
                    }
                }
            }
        }); 
})

表单

<form class="layui-form" action="">
    <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">文本域</label>
        <div class="layui-input-block">
          <textarea name="desc" placeholder="请输入内容" class="layui-textarea"></textarea>
        </div>
    </div>
​
    <div class="layui-form-item">
        <label class="layui-form-label">输入框</label>
        <div class="layui-input-block">
          <input type="text" name="title" required  lay-verify="required" placeholder="请输入标题" autocomplete="off" class="layui-input">
        </div>
    </div>
​
    <div class="layui-form-item">
        <label class="layui-form-label">复选框</label>
        <div class="layui-input-block">
          <input type="checkbox" name="like[write]" title="写作">
          <input type="checkbox" name="like[read]" title="阅读" checked>
          <input type="checkbox" name="like[dai]" title="发呆">
        </div>
    </div>
​
    <div class="layui-form-item">
        <label class="layui-form-label">选择框</label>
        <div class="layui-input-block">
          <select name="city" lay-verify="required">
            <option value=""></option>
            <option value="0">北京</option>
            <option value="1">上海</option>
            <option value="2">广州</option>
            <option value="3">深圳</option>
            <option value="4">杭州</option>
          </select>
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
          <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
          <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>   
</form>
​
​
<script>
//Demo
layui.use('form', function(){
  var form = layui.form;
  
  //监听提交
  form.on('submit(formDemo)', function(data){
    layer.msg(JSON.stringify(data.field));
    return false;
  });
});
</script>

日期

在项目中,会用到时间格式,选择对应的时间

比如:合同签署时间

<input type="text" class="layui-input" id="test1">

在layui里,已经封装了一个时间框,用法如下:

laydate.render({
    elem: '#test1' //指定元素
    type:'year'   //年选择器
});

elem

必填项,用于绑定执行日期渲染的元素,值一般为选择器,或DOM对象

type

type可选值名称用途
year年选择器只提供年列表选择
month年月选择器只提供年、月选择
date日期选择器可选择:年、月、日。type默认值,一般可不填
time时间选择器只提供时、分、秒选择
datetime日期时间选择器可选择:年、月、日、时、分、秒

表单效验(lay-verify)

Layui自带表单效验功能,可以验证输入信息的问题

layui表单元素效验需要在元素上加入lay-verify 如:

 <input type="text" name="ctime" id="ctime" lay-verify="required" class="layui-input">

格式

单条默认规则:lay-verify=“验证A”

多条默认规则:lay-verify=“验证A|验证B” (多条使用|来隔开)

默认

目前layui提供了以下规则

元素效验的对象
required必填项
phone手机号
email邮箱
url网址
number数字
data日期
identity身份证

自定义

同样的,在layui中支持自定义效验方法

//调用自定义效验form.verify()
form.verify({
    //这里的username,pass随便设置了
  username: function(value, item){ //value:表单的值、item:表单的DOM对象
    if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
      return '用户名不能有特殊字符';
    }
    if(/(^\_)|(\__)|(\_+$)/.test(value)){
      return '用户名首尾不能出现下划线\'_\'';
    }
    if(/^\d+\d+\d$/.test(value)){
      return '用户名不能全为数字';
    }
  }
​
  //我们既支持上述函数式的方式,也支持下述数组的形式
  //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字]
  ,pass: [
    /^[\S]{6,12}$/
    ,'密码必须6到12位,且不能出现空格'
  ] 
});
​
​
//使用自定义效验的方式等同于默认方式

正则表达式

既然上面提到了正则表达式,下面简单提一下正则表达式

普通字符

字符描述
[ ]匹配[ ]中的所有字符
[^]匹配除了[^]中的所有字符
[A-Z] [a-z] [0-9]匹配所有大写字母 小写字母 0-9的整数
[\s\S]匹配所有 \s是匹配所有空白符 \S是非空白符
[\w]匹配字母、数字、下划线

限定符

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

特殊字符

特别字符描述
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 $。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。
[标记一个中括号表达式的开始。要匹配 [,请使用 [。
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。
{标记限定符表达式的开始。要匹配 {,请使用 {。
|指明两项之间的一个选择。要匹配 |,请使用 |。

非打印字符

字符描述
\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f匹配一个换页符。等价于 \x0c 和 \cL。
\n匹配一个换行符。等价于 \x0a 和 \cJ。
\r匹配一个回车符。等价于 \x0d 和 \cM。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S匹配任何非空白字符。等价于 \f\n\r\t\v。
\t匹配一个制表符。等价于 \x09 和 \cI。
\v匹配一个垂直制表符。等价于 \x0b 和 \cK。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
form表单元素包括:text 文本输入框,password密码输入框,checkbox复选框,radio单选框,file 文件域,submit表单提交action指向的文件,reset表单清空,image图片提交按钮,button按钮,hidden隐藏域。 select option select 实现下拉选 callback 是回调函数 layui.模块   模块可以是layui已经存在的模块,也可以通过layui.define([mods], callback) 来自己自定义模块。 如果想要使用模块首先要做的必然是加载模块,layui.use(['laypage', 'layedit'], function(){}); 接下来使用layui风格控件  其实感觉layui帮我们定义好了CSS和许多JS文本,我们需要做的只是按照layui的命名规范选好样式进而使用就可以了。  layu官方文档的命名规范为: CSS命名规范 class命名前缀:layui,连接符:-,如:class="layui-form" 命名格式一般分为两种: 一:layui-模块名-状态或类型 二:layui-状态或类型 因为有些类并非是某个模块所特有,他们通常会是一些公共类。如: 一(定义按钮的原始风格):class="layui-btnlayui-btn-primary" 二(定义内联块状元素):class="layui-inline" 1 2 3 4 5 6 7 8 9 当然还有前面提到的使用模块的js代码: layui.use(['form', 'layedit', 'laydate'], function(){   var form = layui.form   ,layer = layui.layer   ,layedit = layui.layedit   ,laydate = layui.laydate;   //日期   laydate.render({     elem: '#date'   });   laydate.render({     elem: '#date1'   });   //创建一个编辑器   var editIndex = layedit.build('LAY_demo_editor');   //自定义验证规则   form.verify({     title: function(value){       if(value.length < 5){         return '标题至少得5个字符啊';       }     }     ,pass: [/(.+){6,12}$/, '密码必须6到12位']     ,content: function(value){       layedit.sync(editIndex);     }   });   //监听指定开关   form.on('switch(switchTest)', function(data){     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {       offset: '6px'     });     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)   });   //监听提交   form.on('submit(demo1)', function(data){     layer.alert(JSON.stringify(data.field), {       title: '最终的提交信息'     })     return false;   }); }); 下面我们按照官方文档的开发规范使用一下form表单的例子       表单集合演示           单行输入框                       验证必填项                             验证手机                                   验证邮箱                                       多规则验证                                   验证日期                                   验证链接                                 验证身份证                       自定义验证                   请填写6到12位密码               范围                           -                                 单行选择框                   </opt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值