vue el-date-picker 直接赋值时控件失效

本文介绍了解决Vue中el-date-picker控件在特定情况下失效的问题。通过使用Vue的$set方法来确保视图更新,避免了直接修改已初始化对象属性导致的界面不刷新情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

前端vue el-date-picker控件无故失效


问题描述

本人是主打后端,新进的公司要求前后端全干,然后又因为前端做得少,所以经常碰到一些奇怪的问题,比如以下操作,是给vue前端 el-date-picker这个时间控件赋值,但是发现,数据是赋值上去了,但是控件失效了,怎么点都没用

if(resData.batchEntity.manage_scene_start_time!=null&&resData.batchEntity.manage_scene_end_time!=null){
                  teacherOpeningTime.push(moment(resData.batchEntity.manage_scene_start_time).format('YYYY-MM-DD HH:MM:ss'));
                  teacherOpeningTime.push(moment(resData.batchEntity.manage_scene_end_time).format('YYYY-MM-DD HH:MM:ss'));
                  resData.teacherOpeningTime = teacherOpeningTime;
                }
                this.formData = resData;


后来疯狂百度,最终在简书找到解决方案,原文链接:https://www.jianshu.com/p/96c822d14d30

解释:
当直接给resData.teacherOpeningTime 赋值 resData.teacherOpeningTime= value , 界面没有变化。但是resData.teacherOpeningTime 值已经更新了。

解决方案:
把 resData.teacherOpeningTime = teacherOpeningTime;
改成 this.$set(resData, "teacherOpeningTime ", teacherOpeningTime ) 即可解决此问题

if(resData.batchEntity.manage_scene_start_time!=null&&resData.batchEntity.manage_scene_end_time!=null){
                  teacherOpeningTime.push(moment(resData.batchEntity.manage_scene_start_time).format('YYYY-MM-DD HH:MM:ss'));
                  teacherOpeningTime.push(moment(resData.batchEntity.manage_scene_end_time).format('YYYY-MM-DD HH:MM:ss'));
                  this.$set(resData, "teacherOpeningTime ", teacherOpeningTime ) 
                }
                this.formData = resData;


原理:受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。
要处理这种情况,我们可以使用$set()方法,既可以新增属性,又可以触发视图更新。

vue2中:<el-form label-position=“right” label-width=“80px” size=“small” :model=“form” style=“padding: 0px;” ref=“numberValidateForm” :rules=“rules”> <el-form-item label=“用户名:” prop=“name”> <el-input v-model=“form.name” style=“width: 200px;” name=“name”></el-input> </el-form-item> <el-form-item label=“用户id:”> <div>{{form.u_id}}</div> </el-form-item> <el-form-item label=“手机号:” prop=“phone”> <el-input v-model=“form.phone” style=“width: 250px;” name=“phone”></el-input> </el-form-item> <el-form-item label=“性别” prop=“gender”> <el-radio-group v-model=“form.gender”> <el-radio :label=“1”>男</el-radio> <el-radio :label=“2”>女</el-radio> <el-radio :label=“3”>保密</el-radio> </el-radio-group> </el-form-item> <el-form-item label=“出生日期” prop=“date”> <el-date-picker type=“date” :picker-options=“pickerOptionsStart” placeholder=“选择日期” v-model=“form.date” style=“width: 200px;”></el-date-picker> </el-form-item> <el-form-item class=“e-i-button”> <el-button @click=“locationNone”>取 消</el-button> <el-button style=“margin-left: 200px;” type=“primary” @click.stop=“areaSubmit(‘numberValidateForm’)”>修改</el-button> </el-form-item> </el-form> form: { name: ‘’, date: ‘’, u_id:‘’, gender: 3, phone: ‘’ }, rules:{ phone: [ { required: false, trigger: ‘change’ }, { validator: checkMobile, trigger: ‘change’ }, ], name: [ { required: false, trigger: &#39;change&#39; }, { validator: checkName, trigger: &#39;change&#39; }, ] }, async Info(){ if(this.$store.state.user.userInfo){ this.userInfo=await this.$store.state.user.userInfo; if(this.userInfo.birthday!=null){ this.form.date=new Date(this.userInfo.birthday); } this.form.name=this.userInfo.name; this.form.phone=this.userInfo.phone; this.form.u_id=this.userInfo.u_id; if(this.userInfo.gender!=null){ this.form.gender=this.userInfo.gender; } this.avatarUrl=‘http://127.0.0.1:9090’+this.userInfo.picture.slice(8) return true; } },日期选择器可以正常使用但其他输入框有初始值但无法交互修改,在注释掉赋值语句后可以均可正常输入,
03-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值