省市区三级联动,使用vue.js的v-for语句动态添加layui的选择框选项后,无法正常显示的解决办法

问题原因:

表单元素是动态添加的,并没有重新渲染

官方也说明了需要主动进行组件渲染才能正常显示

 我们可以看到数据其实已经添加到原生的select组件之下了,但是并没有显示到layui的下拉框下

可以看到渲染出来的dl下的dd只有一个选项

解决办法:

前端代码,使用v-for循环ProvinceInfos,添加<option></option>选项

<div class="choose" id="Three_link">
    <select>
        <option value="" disabled>省</option>
        <option v-for="item in ProvinceInfos" :value="item.areaName">
             {{item.areaName}}
        </option>
    </select>
</div>

vue.js代码 

        let form = layui.form

        //加载省市区
        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('select') //重要!
                        }
                    })
                }

            }

        });

 搞定!

1、这里要注意el的作用范围,不要发生嵌套,不然会提示以下错误:

如果实在有嵌套关系

建议new Vue不要分开,不要用两个vue

或者直接分开放在同一层级

2、form的定义要写在js代码的外面,不然达不到渲染的效果

如下,不能正常渲染组件

//加载省市区
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;
                    let form = layui.form
                    form.render('select')
                }
            })
        }
    }

});

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值