vue3 rule校验调用接口的问题

vue3 rule校验调用接口的问题

const rule = {

bucketNameRules() {

const valid = (rule, value) => {

const reg = /^(?![-])[a-z0-9-]{3,63}(?<![-])$/

if (value.length < 3 || value.length > 63) {

return Promise.reject('请输入 3~63 个字符')

} else if (!reg.test(value)) {

return Promise.reject('允许小写字母、数字、短横线(-),且不能以短横线开头或结尾')

}

//调用接口查询是否重复

bucketNameCheck({

bucketName: value

}).then((res) => {

availableName.value = res.available

if (availableName.value) {

return Promise.resolve()

} else {

return Promise.reject('该Bucket已存在,或被其他用户占用')

}

})

}

return { validator: valid, trigger: 'change', required: true }

}

最上面的两个return Promise是可以正常触发校验规则的
但是在调用接口里的then里面只会在控制台里打印,不会在页面上触发校验规则

请问如何解决?或者在rule之外有没有什么方法可以单独触发校验?


回答:

    const rule = {

bucketNameRules() {

const valid = (rule, value) =>

new Promise((resolve, reject) => {

{

const reg = /^(?![-])[a-z0-9-]{3,63}(?<![-])$/;

if (value.length < 3 || value.length > 63) {

reject("请输入 3~63 个字符");

} else if (!reg.test(value)) {

reject("允许小写字母、数字、短横线(-),且不能以短横线开头或结尾");

}

//调用接口查询是否重复

bucketNameCheck({

bucketName: value,

}).then((res) => {

availableName.value = res.available;

if (availableName.value) {

resolve();

} else {

reject("该Bucket已存在,或被其他用户占用");

}

});

}

});

return { validator: valid, trigger: "change", required: true };

},

};

以上是 vue3 rule校验调用接口的问题 的全部内容, 来源链接: utcz.com/p/937152.html

回到顶部