对不起,我对VueJS和它的框架仍然很新 .
我正在尝试使用vee-validate和自定义规则来检查输入字段的值,以反映对API后端的Axios GET响应 . 基本上,如果您输入了无效的ID,它会引发错误,直到您做对(即:将票证分配给有效的员工,您必须输入有效的员工ID) .
我的模板代码现在看起来像这样:
<b-col cols="4">
<b-input-group>
<b-input-group-text style="width:150px;" slot="prepend">Key Owner</b-input-group-text>
<input
class="form-control"
v-model="selected_owner_id"
type="text"
id="ownerId"
name="ownerId"
data-vv-delay="800"
@change="validateCorpId"
v-validate="'ownerId|required'"
v-bind:class="{'form-control': true, 'error': errors.has('ownerId') }"
>
</b-input-group>
<span v-show="errors.has('ownerId')" class="text-danger">{{ errors.first('ownerId') }}</span>
</b-col>
(我正在搞乱如何做到这一点,因此@change到实际执行Axios API调用的函数)
这是我在上面相同的* .vue文件中做出的Validate扩展规则:
<script>
import { Validator } from "vee-validate";
import VeeValidate from 'vee-validate'
Validator.extend('ownerId', {
// Custom validation message
getMessage: (field) => `The ${field} is not a valid ID.`,
// Custom validation rule
validate: (value) => new Promise(resolve => {
resolve({
valid: value && (this.validateCorpId(value))
});
})
});
...etc...
validateCorpId(value)函数稍后在方法:{}块中
我一直试图通过Vee-Validate文档来了解如何正确创建自定义验证规则,但作为一个新手,很多事情似乎仍然缺失,例如,Validate.extend应该在哪里?我把它放在'script'区域或'create'或'mount'函数里面?
我确实尝试了,它立即被调用,这不是我想要的 - 我只希望它发生在用户输入或更改字段中的数据时,它调用返回true | false值的函数 .
我还在'data'返回块中添加了一个名为is_selected_owner_id_valid的字段,并将我的Axios调用设置为true | false,具体取决于结果,但由于它是布尔值,因此Validate规则立即读取并且评估错误 .
我很高兴继续为我自己工作,但是有没有人有一个完全可行的验证自定义规则,我可以看到和逆向工程?真的很难找到我正在尝试做的一个例子,将API调用作为规则的一部分 .
1 回答
我设法通过最初复制这个类似的发布的答案来解决我的问题:
Vee-validate (VueJS) - evaluating a condition asynchronously
虽然它有效,但是我会将我的解决方案改为适合我提供的示例:https://baianat.github.io/vee-validate/examples/async-backend-validation.html
(我以为我已经完成了所有的vee-validate示例......我错了!)