layui使用实践总结

【1】弹出层子元素获取父页面dom元素值

如下所示,点击添加关系数据会弹出子页面,在子页面需要获取父页面的8。
在这里插入图片描述
假设8对应dom id为orderId,子页面代码示例如下:

var text = parent.window.$('#orderId').val();
console.log("获取的父页面orderID:"+text);

子页面直接获取父页面的变量

父页面设置变量如下:

var fieldType1=[1];//单选数量

那么子页面可以直接使用如下代码获取:

parent.fieldType1

【2】日期时间控件点击闪没

有时页面高度不够,会出现点击控件闪现一下就没有了的情况,可以修改代码如下:

laydate.render({
    elem: '#deadTime',
    type: 'datetime',
    trigger: 'click' //主要是这里哦
});

监听日期时间空间的确定按钮

laydate.render({
   elem: '#beginDate',
   type: 'datetime',
   trigger: 'click',
   done:function(value,data){
       console.log($(this.elem))
       console.log(value)
       app.$data.beginDate=value;
       console.log(data)
   }
});

在这里插入图片描述

【3】检测select的change事件

① form监听

页面代码如下:

<div class="layui-input-inline">
    <select id="type"  name="type" lay-filter="type" >
        <option value="2">学生</option>
        <option value="3">企业</option>
    </select>
</div>

JS如下:

form.on('select(type)', function(data){
   console.log(data)
   if(data.value==2){
       $("#companyDiv").hide();
   }
   if(data.value==3){
       $("#companyDiv").show();
   }
    form.render('select');//select是固定写法 不是选择器
});

② layui-form表单中的select Vue使用@change监听

在layui中,使用form表单,需在form中添加class="layui-form",form属性才会生效,但是在配合使用Vue监听改变事件时,@change监听会失效:

<form style="float: left;" class="layui-form we-search">

    <div class="layui-inline">
        <select  v-model="searchParam.provinceCode" name="provinceCode" @change="changeProvince"  >
            <option v-for="item in provinceList" v-bind:value="item.code">{{item.name}}</option>
        </select>
    </div>

    <div class="layui-inline">
        <input type="text" v-model="searchParam.name" name="name"  placeholder="请输入名称" autocomplete="off" class="layui-input">
    </div>

    <button class="layui-btn" lay-submit lay-filter="search"><i class="layui-icon">&#xe615;</i></button>
</form>

以下是解决办法:

  • 删除form中的class="layui-form",但是需要注意会影响原始form表单
  • 在select中添加lay-filter="checkType",在layui.use使用form.on进行监听,再调用Vue中的方法就可以了
    // 修改select
     <select  v-model="provinceCode" name="provinceCode" lay-filter="checkType"  >
     
    // 监听省份变动
    form.on('select(checkType)', function(data){
        console.log(data.value);//得到被选中的值
        console.log(data.elem);//得到select原始DOM对象
        app.changeProvince(data.value);//调用Vue中的方法
    })
    

③ 多个select级联动态更新

页面代码::

<div class="layui-form-item">
    <label for="name" class="layui-form-label">
        <span class="we-red">*</span>所属学院
    </label>
    <div class="layui-input-inline">
        <select id="facultyId" name="facultyId"  class="layui-select"  lay-filter="checkType">
            <option v-for="item in facultyList" :value="item.id">{{item.name}}</option>
        </select>
    </div>
</div>

<div class="layui-form-item">
    <label for="name" class="layui-form-label">
        <span class="we-red">*</span>所属专业
    </label>
    <div class="layui-input-inline">
        <select id="majorId" name="majorId"  class="layui-select"  >
            <option v-for="item in majorList" :value="item.id">{{item.name}}</option>
        </select>
    </div>
</div>

期望通过学院的选择动态获取学院下的专业列表,测试发现专业select不能再次渲染,这里采用VUE的updated钩子实现效果。

// 监听变动
form.on('select(checkType)', function (data) {
   console.log(data.value);//得到被选中的值
   console.log(data.elem);//得到select原始DOM对象
   app.getMajorList(data.value);//调用Vue中的方法

})
updated: function () {
    this.$nextTick(function () {
        layui.use(['form'], function(){
            layui.form.render('select')
        });
    });
},

【4】行工具头条件显示

<script type="text/html" id="toolbtn">

{{#  if(d.state == true){}}
	<a  class="layui-btn layui-btn-mini layui-btn-danger" lay-event="down">下线</a>
	{{#  } else { }}
	<a class="layui-btn layui-btn-mini " lay-event="up">发布</a>
{{#  } }}
</script>

【5】自定义校验

//自定义验证规则
form.verify({
    email: [/(.+)@.+\..+$/, '请输入正确的邮箱'],
    score: function (value) {
        var regexStr=/\d*\.\d*$/;
        var regex = new RegExp(regexStr);
        if(value>100||value<10||regex.test(value)){
            return "请输入合法值!";
        }
    }
});

【6】分页插件

HTML如下所示:

<div class="layui-row text-center">
    <div id="laypage"></div>
</div>

JS代码如下:

var pageIndex = 1;
var pageSize = 6;
var totalCount = 6;

/*初始化layui的分页插件*/
function initLayui() {
    layui.use(['laydate','laypage'], function () {
        var laypage = layui.laypage,
            laydate = layui.laydate;
        //执行一个laypage实例
        laypage.render({
            elem: 'laypage' //注意,这里的 test1 是 ID,不用加 # 号
            , count: totalCount //数据总数,从服务端得到
            ,theme: '#FF5722'
            ,groups:7  // 连续出现的页码个数 默认值5
            , limit: pageSize //每页显示的条数。laypage将会借助 count 和 limit 计算出分页数。
            ,curr: pageIndex
            ,skip:true
            , limits: [ 6,8, 10] //每页条数的选择项。如果 layout 参数开启了 limit,则会出现每页条数的select选择框
            , layout: ['count', 'prev', 'page', 'next', 'limit', 'skip']
            , jump: function (obj, first) {
                //obj包含了当前分页的所有参数,比如:
                pageSize = obj.limit;
                pageIndex = obj.curr;
                //首次不执行
                if (!first) {
                    pagination(obj.curr, obj.limit);
                }
            }
        });
    });
}

【7】整合Ajax发送请求

期望发送参数以FORM DATA窗格体格式发送,如下图所示:
在这里插入图片描述
这里需要注意processData、contentType设置的值。

$.ajax({
    url: "/goods/reptile?goodsName="+$("#name").val()+"&secondCId="+$("#secondCId").val(),
    type: "post",
    data: {"number":$("#number").val()},
    processData: true,
    contentType: "application/x-www-form-urlencoded",
    beforeSend: function(){
        //返回的参数item,即为当前的input DOM对象
        index = layer.load(1,{shade: [0.3,'grey']});
    },
    success: function (res) {
        //关闭遮罩层
        layer.close(index);
        if (res.success == true) {
            layer.msg(res.msg, {
                icon: 1, time: 1500
            },function () {
                table.reload('test-table-reload', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    }
                    ,where: $('#search-form').parseForm()
                });
            });
        } else {
            layer.msg(res.msg, {
                icon: 2, time: 1500
            },function () {
                table.reload('test-table-reload', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    }
                    ,where: $('#search-form').parseForm()
                });
            });
        }
    },
    error: function (res) {
        layer.msg(res, {icon: 2, time: 1500});
    },
    complete: function () {
    }
});

【8】FormData的使用

初始化空对象

//通过FormData构造函数创建一个空对象
var formdata=new FormData();

追加数据


//可以通过append()方法来追加数据
formdata.append("name","jane");

读取数据


//通过get方法对值进行读取
console.log(formdata.get("name"));

修改数据

//通过set方法对值进行设置
formdata.set("name","janus");

判断key是否存在

formdata.has("name")

删除数据

//删除key为name的值
formdata.delete("name")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值