解决element-ui的下拉框有值却无法选中的情况


Posted in Javascript onNovember 07, 2020

问题描述:

在使用Vue框架和element-ui开发时,下拉框遇见一个问题,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值,也就是下拉框值无法选中。(踩坑踩得莫名其妙)

代码段:

<el-select v-model="value" placeholder="请选择" @change="change()">
   <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>

解决方法:

出现这个问题好像是因为下拉框数据是循环掉别的接口得来的,因为数据层次太多,render函数没有自动更新,需手动强制刷新所以我直接强制刷新了值,而forceUpdate就是重新render。

写一个方法,在select的change事件中调用此方法,运用 this.$forceUpdate()强制刷新,页面正常选值。

change(){
   this.$forceUpdate()
 },

小结:

同理,forceUpdate()这个方法也适用一些很深的组件 state 已经改变了的时候,可以在该组件上面调用,解决页面v-for中修改item属性值后页面页面值不改变的问题。

补充知识:解决element ui select多选下拉框,在编辑表单记录时没有回显数据,默认选中的问题

前端使用vue,项目中使用的是element ui组件,在使用select下拉框多选时,新增记录时select多选下拉框正常使用,没问题。但是在编辑记录时,编辑界面也为select下拉框赋值了,却没有显示数据。

先放一个select多选下拉框编辑时正确的加载数据的显示效果图:

解决element-ui的下拉框有值却无法选中的情况

下拉框代码如下:

<el-form-item prop="czfaIds" label="处置方案">
 <el-select v-model="form.czfaIds" multiple style="width:80%;" placeholder="请选择" clearable :disabled="showControl">
   <el-option
       v-for="item in czfas" 
       :key="item.value"
       :label="item.wsdFamc" 
       :value="item.id" 
    />
  </el-select>
</el-form-item>

下拉框中的数据源czfas是一个数组,选中后的值也是一个数组。但是在后端存储的时候是转换成字符串存到数据库中的,所以在编辑界面从后端获取的返回值是一个字符串,首选要把这个字符串转换成数组,绑定到select 的v-model属性上。

代码如下:

// 编辑
  queryEditRow(index, row) {
   this.titleInfo = '编辑'
   this.dialogVisible = true
   this.form = Object.assign({}, row)

   // 将字符串转换成数组,绑定到select控件的v-model属性上
   this.form.czfaIds = row.czfaIds.split(',')

   this.showbtn = true
   this.showControl = false
  },

但是发现还是有问题,显示的是选中的方案的id值,而且没有将选择的选项选中。

如下图:

解决element-ui的下拉框有值却无法选中的情况

分析:select选择器对数据的显示,是匹配到select下拉框数据源中对应的value值时则会显示相应的label;若是没有匹配到,则显示的是该value。

显然,这里是因为没有匹配到下拉框中的value值,直接显示的这个字段的值。

在浏览器控制台中输出数据源的数据:

解决element-ui的下拉框有值却无法选中的情况

在浏览器控制台输出返回的字符串转换成数组后的值:

解决element-ui的下拉框有值却无法选中的情况

发现select下拉框中的id 和 v-mode里边绑定的id的数据类型不一致,虽然数据的值是一样的,但是一个是字符串,一个是整型数值。将后端返回的字符串在转换成数组时,转换成整形数组,下拉框即可正确显示。

代码如下:

// 编辑
  queryEditRow(index, row) {
   this.titleInfo = '编辑'
   this.dialogVisible = true
   this.form = Object.assign({}, row)

   // 将字符串转换成数组,此时是字符串数组
   var arrStringCzfaIds = row.czfaIds.split(',')
   // 将字符串数组的每一项转换成Number,生成一个新的数组
   var arrIntCzfaIds = []
   for (var arrInt in arrStringCzfaIds) {
    arrIntCzfaIds.push(parseInt(arrStringCzfaIds[arrInt]))
   }
   // 将新的Number数组,绑定到select空间的v-model上
   this.form.czfaIds = arrIntCzfaIds

   this.showbtn = true
   this.showControl = false
  },

此时,显示的效果就是本文开头的效果了。

以上这篇解决element-ui的下拉框有值却无法选中的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js控制的遮罩层实例介绍
May 29 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
jquery插件validation实现验证身份证号等
Jun 04 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
javascript实现标签切换代码示例
May 22 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
Mar 13 Javascript
Electron 调用命令行(cmd)
Sep 23 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 #Javascript
详解datagrid使用方法(重要)
Nov 06 #Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 #Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 #Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
Nov 06 #Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 #Javascript
Nuxt的路由动画效果案例
Nov 06 #Javascript
You might like
php实现paypal 授权登录
2015/05/28 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
微信小程序日历效果
2018/12/29 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
django url到views参数传递的实例
2019/07/19 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
什么是属性访问器
2015/10/26 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
关于迟到的检讨书
2014/01/26 职场文书
2014年平安夜寄语
2014/12/08 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏