Vue form表单input框 手动赋值 提交时 表单input值没有生效 验证仍然是空
一、问题1、input 赋值后表单提交却为空在调用接口将返回的值赋在表单的 input 上或者子页面传递数值给父页面form表单model元素后,提交表单,明明值已经赋上去了,结果提交后显示的该值为空。具体看以下代码:<el-form ref="form" :model="form" :rules="rules" label-width="100px"><el-form-item
·
一、问题
1、input 赋值后表单提交却为空
在调用接口将返回的值赋在表单的 input 上或者子页面传递数值给父页面form表单model元素后,提交表单,明明值已经赋上去了,结果提交后显示的该值为空。具体看以下代码:
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="司机ID" prop="driverId">
<el-input v-model="form.driverId" placeholder="点击选择司机" readonly @focus="driverIdSelected">
<i slot="prefix" class="el-icon-search el-input__icon" />
</el-input>
</el-form-item>
<el-form-item label="关联车辆ID" prop="vehicleIds">
<el-input v-model="form.vehicleIds" placeholder="点击选择车辆" readonly @focus="vehicleIdsSelected">
<i slot="prefix" class="el-icon-search el-input__icon" />
</el-input>
</el-form-item>
</el-form>
rules: {
driverId: [
{ required: true, message: "司机不能为空", trigger: "blur" }
],
vehicleIds: [
{ required: true, message: "车辆不能为空", trigger: "blur" }
],
}
/** 司机页面选择之后回调设置选择司机实体 */
changeRelatedDriver:function(data){
if(data==""){
return false;
}
this.form.driverId=data;
this.driverOpen = false;
},
二、原因
根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
因此,Vue实例创建时,driverId.属性名并未声明,因此Vue就无法对属性执行 getter/setter 转化过程,导致driverId属性不是响应式的,因此无法触发视图更新
三、解决方案
使用使用Vue的全局API: $set()赋值:
this.$set(this.form, 'vehicleIds', data);
不要直接使用this.form.driverId=data,赋值会无效
/** 司机页面选择之后回调设置选择司机实体 */
changeRelatedDriver:function(data){
if(data==""){
return false;
}
//this.form.driverId=data;
this.$set(this.form, 'driverId', data);
this.driverOpen = false;
},
注意第二个属性参数,要用引号,否则无效
更多推荐
所有评论(0)