javascript - 提交前验证问题
问题描述
我正在尝试从 VeeValidate 文档中获取一个示例来工作。可以在这里找到。我显然错过了一些东西,但我不知道是什么。
我的表单始终有效,即使我没有在输入中添加任何文本。我是否需要以某种方式自定义所需的规则? 代码沙盒
<template>
<ValidationObserver ref="observer" v-slot="{ invalid }" tag="form" @submit.prevent="submit()">
<input type="text" rules="required">
<br>
<input type="text" rules="required">
<br>
<button :disabled="invalid">Submit</button>
</ValidationObserver>
</template>
<script>
import { ValidationObserver } from "vee-validate";
export default {
components: {
ValidationObserver
},
methods: {
async submit() {
const isValid = await this.$refs.observer.validate();
console.log("Form is valid", isValid);
if (!isValid) {
// ABORT!!
}
// ship it
}
}
};
</script>
解决方案
每个输入都需要包装在一个ValidationProvider
. 改变这个:
<input type="text" rules="required">
对此:
<ValidationProvider rules="required">
<input type="text" rules="required" v-model="something">
</ValidationProvider>
此外,在某个地方,您需要实际定义要使用的规则,所以在文件的顶部我放了这个:
import { ValidationObserver, ValidationProvider, extend } from "vee-validate";
import { required } from 'vee-validate/dist/rules';
extend('required',required);
您的代码沙箱的工作副本(我还更新了 vee-validate 和 vue 到最新版本): https ://codesandbox.io/s/vue-template-dj9jn
要实际获得示例中提到的行为,而不是使用invalid
标志ValidationObserver
,请尝试使用如下handleSubmit
方法:
<ValidationObserver tag="form" v-slot="{handleSubmit}" @submit.prevent>
...
<button @click="handleSubmit(submit)">Submit</button>
您的提交功能将如下所示:
submit() {
//anything you do here will only be called when the form is valid
}
推荐阅读
- c++ - 如何在类 inputFactory 中调用字符串解析函数
- android - 如何使用 Hilt 创建生命周期感知组件?
- sql - Azure Devops 数据仓库部署错误 SQL72031:此部署在执行过程中可能会遇到错误
- javascript - 如何从 HTML UI 发送自适应卡片(使用 store.dispatch):microsoft/BotFramework-WebChat
- mysql - 最好将单个表用于当前和存档记录,还是一个用于存档,一个用于当前?
- java - 如何检查“在后台运行时显示弹出窗口”权限?
- javascript - CanvasJS Chart.js - 如何使axisY具有恒定范围?
- android - Java gRPC 服务器流模型
- sql - 外键或常规列的索引?
- node.js - 如何使用聚合或任何其他替代方法重写 mapReduce