使用 VeeValidate 验证表单
使用 VeeValidate 时,我们将通过其组件验证 HTML 表单,并利用 Vue 的作用域插槽展示错误信息。例如,以下是我们熟悉的 v-model 输入元素:
<input v-model="username" type="text" />
若需用 VeeValidate 验证,只需用 <ValidationProvider> 组件包裹输入框:
<ValidationProvider name="message" rules="required" v-slot="{ errors }">
<input v-model="username" name="username" type="text" />
<span>{{ errors[0] }}</span>
</ValidationProvider>
通常,我们通过 <ValidationProvider> 组件验证 <input> 元素,利用 rules 属性绑定验证规则,再通过 v-slot 指令显示错误信息。以下是使用该插件加速验证流程的步骤:
-
通过
npm安装VeeValidate:$ npm i vee-validate -
在
/src/目录创建.js文件,使用extend函数添加规则:// src/vee-validate.js import { extend } from 'vee-validate' import { required } from 'vee-validate/dist/rules' extend('required', { ...required, message: 'This field is required' })VeeValidate以独立模块提供了多种内置验证规则(如required、email、min、regex等),因此我们只需按需导入。上述代码中,我们导入required规则并通过extend函数注册,同时在message属性中自定义了提示信息。 -
将
/src/vee-validate.js导入到初始化Vue实例的主入口文件:// src/main.js import Vue from 'vue' import './vee-validate' -
在页面中局部导入
ValidationProvider组件并开始验证该页面的输入字段:// src/components/vee-validation.vue <template> <ValidationProvider name="name" rules="required|min:3" v-slot="{ errors }" > <input v-model.lazy="name" type="text" name="name" > <span>{{ errors[0] }}</span> </ValidationProvider> </template> <script> import { ValidationProvider } from 'vee-validate' export default { components: { ValidationProvider } } </script>我们也可以在
/src/main.js或/src/plugins/vee-validate.js中全局注册ValidationProvider:import Vue from 'vue' import { ValidationProvider, extend } from 'vee-validate' Vue.component('ValidationProvider', ValidationProvider)但如果您不需要在应用的每个页面都使用这个组件,这可能不是个好主意。所以如果只需要在某个页面使用,就局部导入它。
-
局部导入
ValidationObserver组件并将passes对象添加到v-slot指令中。因此让我们按照以下方式重构第 4 步的JavaScript代码:// src/components/vee-validation.vue <template> <ValidationObserver v-slot="{ passes }"> <form v-on:submit.prevent="passes(processForm)" novalidate="true" > <!-- 表单内容 --> <input type="submit" value="Submit" > </form> </ValidationObserver> </template> <script> import { ValidationObserver, ValidationProvider } from 'vee-validate' export default { components: { ValidationObserver, ValidationProvider }, methods: { processForm() { console.log('Posting to the server...') } } } </script>
我们使用 <ValidationObserver> 组件包裹 <form> 元素,在提交前判断表单是否有效。同时利用 <ValidationObserver> 组件作用域插槽对象中的 passes 属性,在表单无效时阻止提交行为。然后将 processForm 方法传递给表单元素 v-on:submit 事件中的 passes 函数。当表单无效时,我们的 processForm 方法将不会被调用。
至此已完成。可以看到我们不再需要在 methods 属性中为 v-on:submit 事件编写 checkForm 方法,因为 VeeValidate 已经帮我们完成了繁重的表单元素验证工作,现在我们的 JavaScript 代码更加简洁。我们只需要用 <ValidationProvider> 和 <ValidationObserver> 组件包裹输入字段即可。
|
如需了解更多关于 您可以在我们 |
接下来我们将在下一节探讨如何在 Nuxt 应用中应用 VeeValidate。