ElementUI el-select多选下拉框,回显数据后无法重新选择和修改
摘要:ElementUI el-select多选下拉框回显后无法修改的问题,可通过两种方案解决。方案一建议在select组件添加@change="$forceUpdate()",但可能因数据层次复杂失效。更有效的方案二采用this.$set方法赋值,确保数据响应式更新。具体操作为:将原push赋值方式改为先用临时数组收集数据,再通过this.$set(this.form,'so
问题
ElementUI el-select多选下拉框,回显数据后无法重新选择和修改,点击选择和删除都没有反应,页面也没有报错
方案一
网上搜出来的基本上都是这个解决办法,但是我设置后没有生效,还是无法选择和修改
原因 下拉框数据是循环别的接口得来的,因为数据层次太多,render函数没有自动更新,需手动强制刷新。
@change="$forceUpdate()"
添加位置如下
<el-select v-model="form.sourceOrg" style="width:100%" multiple placeholder="请选择所属应用" @change="$forceUpdate()">
<el-option
v-for="item in appOptions"
:key="item.id"
:label="item.appName"
:value="item.id"
/>
</el-select>
方案二(解决)
最后通过使用this.$set赋值解决了该问题
this.$set能够实现什么功能
官方解释:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hello,ningzaichun')
简单说即是:当你发现你给对象加了一个属性,在控制台能打印出来,但是却没有更新到视图上时,也许这个时候就需要用到this.$set()这个方法了
原来的赋值方式
this.form.sourceOrg = []
this.form.sourceOrgs.forEach(item => {
this.form.sourceOrg.push(tem.appPriId)
})
改为
var as = []
this.form.sourceOrgs.forEach(item => {
as.push(item.appPriId)
})
this.$set(this.form, 'sourceOrg', as)
修改后,解决此问题,回显数据后下拉框可以重新选择和修改

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)