解决办法参考:
解决 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钩子函数会在以下情况下被调用:
- 当组件的数据发生变化,导致重新渲染时。
- 当父组件重新渲染,并且当前组件也需要更新时。
- 当使用
$forceUpdate()
方法强制组件重新渲染时。
需要注意的是,updated钩子函数中的代码执行时,实际DOM已经更新完成。