vue input输入框只读,手动赋值后提交form表单时,验证没刷新,依然验证为空

当我在没有输入input的情况下,点击确认验证,提示输入框为空
在这里插入图片描述

	<el-form-item label="变更客户经理" prop="changeUserName">
       <div class="flex">
         <el-input v-model="form.changeUserName" ref="inputRef" disabled />
         <el-button class="ml-10" @click="changeManage">.....</el-button>
       </div>
    </el-form-item>

点击选择变更的内容之后,手动给input赋值后,依然提示让我输入,而此时我输入框是有值的
在这里插入图片描述
我试了各种方法,手动给输入框获取焦点再失去焦点,发现都不行
最后找到原因是:
根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
因此,Vue实例创建时,changeUserName属性名并未声明,因此Vue就无法对属性执行 getter/setter 转化过程,导致changeUserName属性不是响应式的,因此无法触发视图更新

解决方案:

第一步:
readonly或者disabled触发不了blur事件,可以改成change事件

rules: { 
    changeUserName: [{ required: true, message: "请选择客户经理", trigger: "change"}], 
 },

第二部:
给form的changeUserName加上初始值

data(){
	return :{
		form:{
			changeUserName:""
		}
	}
}

第三步:
在给changeUserName赋值的时候,使用Vue的全局API: $set()赋值

submitPopupData() {
	// this.form.changeUserName = this.currentRow.userName
    this.$set(this.form,'changeUserName',this.currentRow.userName);//赋值
    this.dialogVisible = false;
},

到此就解决了!
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值