layui与vue同时使用,绑定数据,无法正确显示的问题

在项目中遇到layui组件与vue框架同时使用时,数据绑定出现异常,主要表现为根据'上午'、'下午'的选择,应当动态显示的菜品信息未能正确更新。问题集中在layui的复选框样式与vue的双向数据绑定不协调。解决方案需要深入理解两者的工作原理并进行适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能描述:根据“上午”、“下午”的不同选择,展示不同的菜品信息
菜品复选框使用layui的样式,复选框的文字使用vue绑定

<div class="main-head">
        <p><span>在线预定</span></p>
    </div>
    <div class="main-reserve">
        <form action="#" method="post" id="food-reserve" class="layui-form">
            <ul>
                <li>
                <div class="layui-inline">
                    <div class="layui-input-inline">
                        <select name="modules" lay-verify="required" onchange="selectFood()" lay-search="">
                            <option value="0" selected>请选择时间范围</option>
                            <option value="1">上午</option>
                            <option value="2">下午</option>
                        </select>
                    </div>
                </div></li>
                
                <div class="layui-form-item" style="display: none" id="menuList">
                    <label class="layui-form-label">选择菜品</label>
                    <div class="layui-input-block" id="menu">
                        <input v-for="info in obj" type="checkbox" name="foodId" v-bind:title="info.fcname + '/¥' + info.fprice" v-bind:value="info.id">
                        <!--<input type="checkbox" name="like[read]" title="阅读">
                        <input type="checkbox" name="like[game]" title="游戏">-->
                    </div>
                </div>
            </ul>
            <div class="layui-form-item">
                <div class="layui-input-block">
                    <button class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>

        </form>
    </div>

相应js代码部分

<script>
    var form;
    layui.use(['laydate','form'], function(){
        var laydate = layui.laydate;
        form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功

        form.on('select', function(data){
            //获取被选中的option标签
            var flag = data.value;
            if (flag == 1) {
                $("#menuList").show();
                findDinner();
            } else if (flag == 2){
                $("#menuList").show();
                findLunch();
            } else {
                alert("请选择时间范围");
            }
        });
    });

</script>
<script type="application/javascript">
    var menu = new Vue({
        el:"#menu",
        data:{
            obj:[]
        }
    })

    function findLunch() {
        findMenu("午餐");
    }

    function findDinner() {
        findMenu("晚餐");
    }

    function findMenu(type) {
        $.ajax({
            type:"get",
            url:"/Restaurant/food/orderMenu.do?type=" + type,
            dataTyep:"json",
            success:function(data) {
                if (data.code == 1) {
                    menu.obj=data.info;
                    /* 设置延迟时间,避免vue与layui同时数据绑定造成的冲突 */
                    setTimeout(function () {
                        form.render('checkbox');
                    }, 300);
                }

            }
        })
    }

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值