-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Closed
Labels
Description
- I have searched the issues of this repository and believe that this is not a duplicate.
Version
2.2.2
Environment
os: macOS Big Sur 11.1, browser: chrome 91.0.4472.106, vue: 3.1.4
Reproduction link
Steps to reproduce
输入 pass, confirm, age,点击"校验"按钮
What is expected?
根据 规则 对 'pass', 'confirm' 表单项进行校验,若符合规则,打印 values,若不符合规则,catch 异常并打印,对应表单项出现警告交互
What is actually happening?
符合规则的表单内容同样抛出了异常被 catch,代码逻辑和异常如下
try {
const values = await formRef.value.validateFields(['pass', 'checkPass'])
console.log(values)
} catch (err) {
console.log('捕获异常', err)
}
-----------------------console-----------------------
捕获异常, {values: Object, errorFields: Array(0), outOfDate: true}
{
"values": {
"pass": "aa22",
"checkPass": "aa22"
},
"errorFields": [],
"outOfDate": true
}因为想要复用一些规则,同时该规则校验需要其他表单项参数,所以用函数返回
const validatePass = (validateFields, checkPass) => {
return {
trigger: "change",
validator: async (rule, value) => {
if (value !== "" && checkPass !== "") {
validateFields("checkPass");
}
return Promise.resolve();
},
};
};
const validatePass2 = (pass) => {
return {
trigger: "change",
validator: async (rule, value) => {
if (value !== pass) {
return Promise.reject("Two inputs don't match!");
}
return Promise.resolve();
},
};
};
const rules = computed(() => ({
pass: [
// 如果将以下注释打开,校验捕获的异常会很奇怪
// { required: true, message: "please input the password" },
validatePass(formRef?.value?.validateFields, formState.checkPass),
],
checkPass: [validatePass2(formState.pass)],
age: [
{
validator: checkAge,
trigger: "change",
},
],
}));