在 Vue.js 中,如果你想要在用户手动输入后进行必填校验,可以通过动态更新规则来实现。你可以使用 v-model
来双向绑定输入框的值,同时结合 @blur
事件(当输入框失去焦点时触发)来检查当前的输入值是否满足要求。
以下是如何调整你的代码以实现手动输入后的必填校验的示例:
<template>
<div
class="loanInfo"
:style="isCustomerNotFound && productRows.length > 0 ? { height: '100px' } : {}"
v-if="!isEditing"
>
<a-row v-if="isCustomerNotFound" v-for="(item, index) in productRows" :key="index">
<a-col :span="12" v-if="isCustomerNotFound">
<a-form-item
label="产品名称"
name={`productName-${index}`}
:rules="[{
required: true,
message: '请手动输入产品名称!',
validator: (rule, value) => {
return value ? Promise.resolve() : Promise.reject('请手动输入产品名称!');
}
}]"
style="width: 101%"
>
<a-input
v-model:value="item.productName"
@blur="validateField(`productName-${index}`)"
/>
</a-form-item>
</a-col>
<a-col :span="12" v-if="isCustomerNotFound">
<a-form-item
label="借据号"
name={`loanInfoCode-${index}`}
:rules="[{
required: true,
message: '请手动输入借据号!',
validator: (rule, value) => {
return value ? Promise.resolve() : Promise.reject('请手动输入借据号!');
}
}]"
style="width: 102%; margin-left: -5px"
>
<a-input
v-model:value="item.loanInfoCode"
@blur="validateField(`loanInfoCode-${index}`)"
/>
</a-form-item>
</a-col>
</a-row>
<span
v-if="productRows.length > 0 && isCustomerNotFound"
class="jiahao"
@click="addProductRow"
>
+ 添加产品
</span>
</div>
</template>
<script setup>
import { ref } from 'vue';
// 假设这些是你的状态管理变量,你可以根据自己的需求修改它们。
const isCustomerNotFound = ref(true); // 根据实际逻辑设定
const productRows = ref([{ productName: '', loanInfoCode: '' }]); // 示例数据,初始一个空对象
function addProductRow() {
productRows.value.push({ productName: '', loanInfoCode: '' });
}
// 校验字段函数
function validateField(name) {
// 获取 form 实例进行验证,也许你需要引入 Form 实例或用 refs 引用 form 表单组件。
}
</script>
<style scoped>
.jiahao {
cursor: pointer;
}
</style>
注意事项:
- 在表单项中定义
name
时,可以使用动态的方式,例如:name={
productName-${index}}
,这样可以确保每个表单项有唯一标识。 - 使用了
@blur
事件来触发字段验证,这样一旦用户完成了对该字段的编辑并离开,该字段就会被验证。 - 自定义校验函数直接在规则中处理了异步返回,满足条件则 resolve,否则 reject。
- 确保你的
<a-form>
使用正确,并与 Vue 的响应式系统兼容,以确保验证能正常工作。
这样,你可以在用户手动填写信息后实时进行必填校验,并显示相关错误信息。
内容由零声教学AI助手提供,问题来源于学员提问