给Layui的下拉框select动态插入元素,明明调用了form.render()主动进行组件渲染,元素还是不能正常显示。

解决办法参考:

解决 Layui + Vue 动态渲染数据在 IE下 form.render() 无效 问题_layui.form.render()不生效-CSDN博客

前端:

<div class="layui-form-item" id="Three_link">
    <label class="layui-form-label">所在地区:</label>
    <div class="choose">
        <select id="province" lay-filter="province">
            <option value="">省</option>
            <option v-for="item in ProvinceInfos" :value="item.areaId">
                {{item.areaName}}
            </option>
        </select>
    </div>
</div>

这里面select的选项是动态插入的,所以需要主动进行渲染,按照之前写的文章,进行主动渲染,没有效果(原因暂时没找到)

后端代码:

let PCT = new Vue({
    el: "#Three_link",
    data: {
        ProvinceInfos: [],
        CityInfos: [],
        TownInfos: []
    },
    mounted: function () {
        this.getProvince()
    },
    methods: {
        getProvince() {
            axios.get("/Area/pro").then(res => {
                if (res.data.code == 200 && res.status == 200) {
                    this.ProvinceInfos = res.data.data;
                    form.render()  //失效了
                }
            })
        }
    }
});

 解决办法:

在Vue的updated生命周期函数中进行渲染。

let PCT = new Vue({
    el: "#Three_link",
    data: {
        ProvinceInfos: [],
        CityInfos: [],
        TownInfos: []
    },
    mounted: function () {
        this.getProvince()
    },
    methods: {
        getProvince() {
            axios.get("/Area/pro").then(res => {
                if (res.data.code == 200 && res.status == 200) {
                    this.ProvinceInfos = res.data.data;
                }
            })
        }
    },
    //无论是组件本身的数据变更,还是从父组件接收到的 props 或者从vuex里面拿到的数据有变更,
    // 都会触发虚拟 DOM 重新渲染和打补丁,并在之后调用 updated
    updated: function () {
        layui.use('form', function () {
            form.render();//!在这里渲染
        })
    }

});

注:

当组件的数据发生变化,导致虚拟DOM重新渲染并应用到实际DOM后,updated钩子函数会被触发。(也就是说:当你改变了组件中的数据,页面重新显示出来后,updated钩子函数就会被触发

具体来说,updated钩子函数会在以下情况下被调用:

  1. 当组件的数据发生变化,导致重新渲染时。
  2. 当父组件重新渲染,并且当前组件也需要更新时。
  3. 当使用$forceUpdate()方法强制组件重新渲染时。

需要注意的是,updated钩子函数中的代码执行时,实际DOM已经更新完成。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用layui框架进行动态添加下拉框组件动态渲染数据时,可以使用下面的代码实现: HTML代码: ```html <div class="layui-form-item"> <label class="layui-form-label">下拉框:</label> <div class="layui-input-block"> <select name="select" lay-filter="select"> <option value="">请选择</option> </select> </div> </div> ``` JavaScript代码: ```javascript layui.use(['form', 'jquery'], function(){ var form = layui.form; var $ = layui.jquery; // 动态渲染下拉框数据 function renderSelect() { var data = [{value: 1, text: '选项1'}, {value: 2, text: '选项2'}, {value: 3, text: '选项3'}]; var select = $('select[name=select]'); select.empty(); select.append('<option value="">请选择</option>'); layui.each(data, function(index, item){ select.append('<option value="'+ item.value +'">'+ item.text +'</option>'); }); form.render('select'); } // 动态添加下拉框组件 function addSelect() { var html = '<div class="layui-form-item">'+ '<label class="layui-form-label">下拉框:</label>'+ '<div class="layui-input-block">'+ '<select name="select" lay-filter="select">'+ '<option value="">请选择</option>'+ '</select>'+ '</div>'+ '</div>'; $('.layui-form').append(html); renderSelect(); } // 初始化页面 renderSelect(); // 点击按钮添加下拉框组件 $('#addSelect').click(function(){ addSelect(); }); // 监听下拉框选中事件 form.on('select(select)', function(data){ console.log(data.value + ' ' + data.elem[data.elem.selectedIndex].text); }); }); ``` 在上述代码中,首先使用`layui.use`方法加载`form`和`jquery`模块,然后定义了两个函数`renderSelect`和`addSelect`,分别用于动态渲染下拉框数据和动态添加下拉框组件。在`renderSelect`函数中,通过定义一个数据数组,然后遍历该数组,动态添加下拉框选项,并调用`form.render('select')`方法进行渲染。在`addSelect`函数中,通过拼接HTML代码,动态添加一个下拉框组件,并调用`renderSelect`函数进行数据渲染。最后,在页面加载完毕后,调用`renderSelect`函数进行初始化,并监听下拉框选中事件,输出选中的值和文本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值