热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十七、表单中的输入验证

十七、表单中的输入验证在前一章中,我们讨论了保护页面以及创建登录表单和注册表单。但是,我们没有

十七、表单中的输入验证

在前一章中,我们讨论了保护页面以及创建登录表单和注册表单。 但是,我们没有编写任何可以防止用户输入无效输入的验证。

本章将为表单添加验证,这将改善用户使用表单时的体验。 让我们开始。

我们将涵盖以下议题:


  • 安装输入验证库

  • 在表单中使用验证器


技术要求

你需要 Visual Studio Code 来完成本章。

以下是本章已完成存储库的链接:https://github.com/PacktPublishing/ASP.NET-Core-and-Vue.js/tree/master/Chapter17/。

安装输入验证库

用户友好验证告知用户输入时字段无效的原因。 我们可以通过在表单的每个字段中编写一个验证器来从头构建它,并确保验证器是响应式的。 实现是可行的,但它需要大量的时间,并且代码的整洁程度将取决于开发人员。

那么,为什么不使用一个验证我们的库呢? 幸运的是,有几个 Vue.js 库用于验证,在本节中,我们将使用其中一个顶级库。

所以让我们安装一个输入验证库:

npm i vuelidate

vuelidate库是一个简单的基于模型的轻量级验证,我们可以将其用于我们的 Vue 应用。

现在,让我们在src/plugins文件夹中创建一个名为vuelidate.js的 Javascript 文件,并应用以下代码:

import Vue from "vue";
import Vuelidate from "vuelidate";
Vue.use(Vuelidate);

前面的代码导入VueVuelidate,然后将Vuelidate传递给Vue use方法。

接下来,我们用以下代码更新main.js:

import "./plugins/vuelidate";

让我们从刚才创建的文件中引入Vuelidate。 这是所有。

接下来,我们创建一个名为validators的文件夹,并在文件夹中创建一个名为index.js的 Javascript 文件。 它应该像validators/index.js:

import { required, email, minLength } from "vuelidate/lib/validators";
export default {
login: {
email: { required, email },
password: { required, minLength: minLength(8) },
},
};

为了实现内聚性,我们在单独的文件中定义验证器。 我们有一个登录对象,它有一个电子邮件。 电子邮件是必需的,并且只能是电子邮件格式。 登录对象还包含一个密码对象,这也是必需的,至少 8 个字符。

简单易行,对吧? 现在让我们使用一些验证器。

在表单中使用验证器

在表单中使用验证器很容易,因为我们使用了一个npm库来验证表单,而且我们并不是在重复工作。

现在,让我们更新auth/views文件夹中的Login.vue页面:

import validators from "@/validators";

让我们导入已经创建的validators,然后在computed块中使用validators,如下所示:

computed: {
emailErrors() {
const errors = [];
if (!this.$v.login.email.$dirty) return errors;
!this.$v.login.email.email && errors.push("Must be
valid e-mail");
!this.$v.login.email.required && errors.push("E-mail
is required");
return errors;
},
passwordErrors() {
const errors = [];
if (!this.$v.login.password.$dirty) return errors;
!this.$v.login.password.required &&
errors.push("Password is required");
!this.$v.login.password.minLength &&
errors.push("Minimum characters is 8");
return errors;
},
},
validations: {
login: validators.login,
},

我们有一个针对电子邮件错误的computed方法。 初始化错误数组。 它检查email字段是否脏,意味着该字段的值发生了变化。 它还检查email字段是否无效。 emailErrors还检查邮件是否为空。

模式也与passwordErrors计算方法相同。 美元符号意味着属性对任何变化都是有反应的。

然后,我们声明一个带有login属性的对象的validations块,并将validators.login赋值给它。

下一步是用以下代码更新登录字段的v-text-field组件:


label="E-mail"
v-model="login.email"
@input="$v.login.email.$touch()"
@blur="$v.login.email.$touch()"
:error-messages="emailErrors"
>

我们在前面的代码中添加了错误检查器。 错误检查器是反应性的; 我们一输入东西,它们就会运行,而我们的注意力就会分散。 :error-messages是来自 Vuetify 的一个指令,我们可以使用它来分配emailErrors的计算方法。 这很好,不是吗?

让我们也更新登录密码的v-text-field组件,如下所示:


type="password"
label="Password"
hint="At least 8 characters"
counter
v-model="login.password"
@input="$v.login.password.$touch()"
@blur="$v.login.password.$touch()"
:error-messages="passwordErrors"
>

前面的代码将验证器附加到登录密码v-text-field。 我们使用的是带有值passwordErrors:error-messages

现在,运行应用,然后在登录表单中输入yoursuperhero,不完成电子邮件,然后在密码字段中添加两个字母:

Figure 17.1 – Not valid

图 17.1 -无效

图 17.1表明,没有@domain.comyoursuperhero是无效的,同时两个应该是八个字母/数字的字母也是无效的。 字段从黑色变为红色,字段下面的红色文本表明验证器正在工作。

这很好。 现在我们有了一个概念证明,输入验证库正在工作。 让我们向其他表单添加更多的字段验证。

第一步是更新validators文件夹的index.js文件:

import {
required,
email,
minLength,
maxLength,
} from "vuelidate/lib/validators";

我们将maxLength添加到从vuelidate/lib/validators的现有导入中。

然后通过添加citycountryabout来更新导出的对象:

export default {
login: {
email: { required, email },
password: { required, minLength: minLength(8) },
},
city: {
required,
maxLength: maxLength(90),
},
country: {
required,
},
about: {
required,
},
};

添加的大多数对象都是下面表单中的必需字段,我们将对其进行修正。

现在,用以下代码更新components文件夹的AddTourListForm.vue组件:

import validators from "@/validators";

让我们导入validators,然后添加一个带有错误检查方法的计算对象和验证对象,如下所示:

computed: {
cityErrors() {
const errors = [];
if (!this.$v.bodyRequest.city.$dirty) return errors;
!this.$v.bodyRequest.city.required &&
errors.push("City is required");
!this.$v.bodyRequest.city.maxLength &&
errors.push("Max length is 90");
return errors;
},
countryErrors() {
const errors = [];
if (!this.$v.bodyRequest.country.$dirty) return
errors;
!this.$v.bodyRequest.country.required &&
errors.push("Country is required");
// no need for max length because this is a dropdown
with options
return errors;
},
aboutErrors() {
const errors = [];
if (!this.$v.bodyRequest.about.$dirty) return errors;
!this.$v.bodyRequest.about.required &&
errors.push("About is required");
return errors;
},
},
validations: {
bodyRequest: {
// for brevity, please go to the github repo
},
},

我们有cityErrors计算方法,如果city字段为空且最大长度超过 90 个字符,则会增加一个错误。 虽然country字段只需要一个必需的验证,因为在下拉列表或自动补全组件中不需要最大长度,但是aboutErrors只检查字段是否为空。

同时,validations对象初始化一个bodyRequest对象,其属性来自validators/index.js文件。

现在,让我们通过编辑city输入的v-text-field来更新AddTourListForm.vue组件的template语法:


label="City"
v-model="bodyRequest.city"
@input="$v.bodyRequest.city.$touch()"
@blur="$v.bodyRequest.city.$touch()"
:error-messages="cityErrors"
required
>

我们为:error-messages指令添加了cityErrors。 我们更新了@input@blur事件。

我们还可以编辑template语法中的v-autocomplete组件,如下所示:


:items="countryList"
label="Country"
v-model="bodyRequest.country"
@input="$v.bodyRequest.country.$touch()"
@blur="$v.bodyRequest.country.$touch()"
:error-messages="countryErrors"
required
>

前面的代码使用验证器和国家输入错误消息更新@input@blur:error-messages

接下来,我们更新字段,实际上是文本区域,为about输入:


label="About"
v-model="bodyRequest.about"
@input="$v.bodyRequest.about.$touch()"
@blur="$v.bodyRequest.about.$touch()"
:error-messages="aboutErrors"
required
>

在前面的代码中,让我们使用v-textarea组件中的计算错误和错误消息。 前面的代码还将验证附加到textarea

现在,重新运行应用。

City字段中写出 100 个字符的句子,选择一个国家,点击About文本区域,然后再点击City字段。 这是在我们的表单中创建一个示例条目,如下所示:

Figure 17.2 – New Tour List form validations

图 17.2 -新 Tour List 表单验证

图 17.2 显示Create New Tour List表单中的输入验证正在工作。 City字段中有错误,因为 City 的最大字符数为 90,而About字段为空。

活动

让我们通过完成 Register Form 的验证、AddTourPackageForm.vue的验证和UpdateTourPackageForm.vue的验证来测试您在 Vue.js 中的技能。

Vuelidate 的链接为https://vuelidate.js.org/。 还有另一个很好的输入验证库,您可能想要签出它。 该库名为VeeValidate(https://vee-validate.logaretm.com/v4)。 如果你打算使用 Vue.js 版本 3,我可以推荐 VeeValidate。 该库易于使用,并具有对开发人员友好的 api。 库还很好地集成了 Yup 验证,Yup 验证是用于验证的 Javascript 模式构建器。

让我们总结一下你所学到的。

总结

让我们快速总结一下你在这一章中学到的东西来总结它。 您已经学习了如何安装 Vuelidate 并在 Vue 应用中设置它。 您还学习了如何使用 Vuelidate 在表单中创建输入验证,这为应用的表单提供了更好的可用性。

在下一章中,你会看到用 ASP 编写测试是多么重要,同时又是多么有趣.NET Core 应用。


推荐阅读
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 10款精选jQuery插件助力响应式网页设计布局优化
    响应式网页设计在当今的数字环境中至关重要。本文精选了10款优秀的jQuery插件,旨在帮助设计师和开发者优化网站布局,确保内容在不同设备上(如手机、平板电脑等)都能呈现最佳效果,提升用户体验。这些插件不仅功能强大,还能显著简化开发流程,提高工作效率。 ... [详细]
  • 在Vue中使用highCharts绘制3d饼图
    highcharts是国外知名基于javascript的图表库。由于中文官网的vue中使用highcharts配置繁琐并且需要引入jquery作为依赖,所以弃用。接下来,给各位伙伴 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 公司计划部署邮件服务器,考虑到已有域名,决定自行搭建内部邮件服务器。经过综合考量,最终选择在Linux环境中进行搭建,并记录了相关配置和实践过程。本文将详细介绍Postfix的基本设置步骤和实践经验,帮助读者快速掌握邮件服务器的搭建方法。 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 今日精选:10款实用的jQuery随机效果插件
    在今天的精选内容中,我们推荐了10款实用的jQuery随机效果插件。这些插件不仅功能强大,而且设计精良,能够为您的网页增添独特的互动体验。从动态图像效果到文本动画,每款插件都提供了丰富的自定义选项,帮助开发者轻松实现创意视觉效果。特别值得一提的是,其中一款插件集成了与Google API的无缝对接,使数据展示更加生动和直观。 ... [详细]
  • ### 一、指令概述指令是 Vue 中的一种特殊属性,用于增强 HTML 元素的功能。它们以 `v-` 开头,如 `v-cloak`。### 二、`v-cloak` 指令的应用`v-cloak` 指令主要用于解决页面加载过程中未编译的 Vue 插值表达式短暂显示的问题。在 Vue 实例编译完成之前,带有 `v-cloak` 的元素将被隐藏,从而避免了“闪动”现象。通过结合 CSS 样式,可以进一步优化用户体验,确保页面在初始加载时保持整洁和专业。 ... [详细]
  • 2017-09-07前端日报精选JavaScriptEventLoop机制详解与Vue.js中实践应用Redux基础与实践如何用js获取虚拟键盘高度?( ... [详细]
author-avatar
书友14395217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有