Angular 表单的validation校正学习

概念:

       Angular中的表单valid是指表单中的输入项是否符合预设的规则和条件。在Angular中,可以通过使用表单控件的属性和方法来判断表单的valid状态,例如使用form.valid属性来判断整个表单是否valid,或者使用formControl.valid属性来判断单个表单控件是否valid。

        在使用表单valid的时候,可以通过在模板中使用ngIf指令来根据valid状态来显示或隐藏相应的内容,或者在组件中使用valid状态来进

应用场景:

  1. 表单提交前的验证:在用户提交表单之前,可以通过表单的valid状态来进行验证,确保用户输入的内容符合要求。
  2. 动态显示错误提示:可以根据表单控件的valid状态来动态显示错误提示信息,帮助用户更好地理解输入的要求。
  3. 控制提交按钮的可用状态:可以根据整个表单的valid状态来控制提交按钮的可用状态,确保用户只有在输入符合要求的情况下才能提交表单。

示例:

import { Component } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';@Component({selector: 'app-validation',template: `<form [formGroup]="myForm" (ngSubmit)="onSubmit()"><input type="text" formControlName="name"><div *ngIf="myForm.get('name').invalid && myForm.get('name').touched"><p *ngIf="myForm.get('name').errors.required">Name is required</p></div><button type="submit">Submit</button></form>`
})
export class ValidationComponent {myForm: FormGroup;constructor() {this.myForm = new FormGroup({name: new FormControl('', Validators.required)});}onSubmit() {if (this.myForm.valid) {// Form is valid, do something}}
}

使用小技巧:

  • hasError方法:可以使用 hasError 方法来检查表单控件的特定错误。该方法可用于检查表单控件是否包含特定的验证错误。格式为:form.controls['表单名'].hasError('错误类型名'),比如,form.get('name').hasError('required'),在这里我们使用 hasError('required') 方法来检查名为“name”的表单控件是否包含“required”验证错误。
  • 多个表单验证的书写格式为:
     this.inputForm = new FormGroup({inputText: new FormControl('', [Validators.required, this.forbiddenCharactersValidator()])});
  • setValidators方法:可以动态设置表单控件的验证器。这允许我们在运行时根据特定条件更改表单控件的验证规则。
    updateValidation() {const nameControl = this.myForm.get('name');if (nameControl) {nameControl.setValidators([Validators.required, Validators.minLength(3)]);nameControl.setValidators([]);//设置成无任何表单验证nameControl.updateValueAndValidity();}}
  • 自定义表单验证示例:
    <!-- 在模板中定义一个输入框 -->
    <input type="text" [(ngModel)]="inputText" name="inputText" [ngClass]="{ 'is-invalid': inputForm.controls.inputText.invalid }" /><!-- 在组件中定义表单控制器,以及包含自定义校验器的验证器函数 -->
    import { Component } from '@angular/core';
    import { FormControl, FormGroup, Validators } from '@angular/forms';@Component({selector: 'my-app',template: `<form [formGroup]="inputForm"><input type="text" [(ngModel)]="inputText" name="inputText" [ngClass]="{ 'is-invalid': inputForm.controls.inputText.invalid }" /></form>`
    })
    export class AppComponent {inputForm: FormGroup;inputText: string;constructor() {this.inputForm = new FormGroup({inputText: new FormControl('', [Validators.required, this.forbiddenCharactersValidator()])});}// 自定义表单验证器,判断输入是否包含特殊字符// 这个验证器的名字为forbiddenCharacters, 可用hasError('forbiddenCharacters')方法来判断表单是否有这个错误forbiddenCharactersValidator() {return (control: FormControl) => {const forbiddenCharacters = /[&%$#@!*]/;const invalid = forbiddenCharacters.test(control.value);return invalid ? { 'forbiddenCharacters': true } : null;};}
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记自动化测试发现的一个因表空间不足引发的BUG

0 背景介绍 这是一个BS架构的项目&#xff0c;数据库是SQL Server&#xff0c;前端浏览器呈现数据&#xff0c;操作数据。 1 现象介绍 功能为发送消息&#xff0c;类似广播&#xff0c;相关人员在系统中都可以接收到。之前功能都正常&#xff0c;这两天跑自动化测试时&#x…

python类继承之__init__函数覆盖问题

目录 1.问题描述 2.代码演示 3.总结 在Python这个广受欢迎的编程语言中&#xff0c;类继承是一项强大而精巧的特性。通过类继承&#xff0c;我们可以构建出更加灵活、可重用和易维护的代码&#xff0c;同时实现代码的模块化和扩展性。 但是如果对于熟悉C和java的人而言&…

R语言学习 case2:人口金字塔图

step1&#xff1a;导入库 library(ggplot2) library(ggpol) library(dplyr)step2&#xff1a;读取数据 data <- readxl::read_xlsx("data_new.xlsx", sheet 1) datareadxl::read_xlsx() 是 readxl 包中的函数&#xff0c;用于读取Excel文件。 step3&#xff1…

ckman:非常好用的ClickHouse可视化集群运维工具

概述 什么是ckman ckman&#xff0c;全称是ClickHouse Management Console&#xff0c; 即ClickHouse管理平台。它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&#xff1a;github…

全网最详细丨2024年AMC8真题及答案来了

目录 前言 真题回忆 真题解析 结尾 前言 相信大家都已经知道今年AMC8出事情了吧&#xff0c;但最重要的还是要从中学到新知识。 听说今年考生被提前12分钟强制交卷了&#xff0c;肯定因为试题泄露了。 最新回复&#xff1a;我们这边已经退费了 真题回忆 需要word文档的请…

快速幂 算法

暴力算法 我们可以采用暴力算法 #include<bits/stdc.h> using namespace std; #define ll long long int main() {ll a, b, c;cin >> a >> b >> c;ll ans 1;for (ll i 1; i < b; i) {ans * a;}ans % c;cout << ans; } 不过这样肯定会超时…

计算机网络基础概念解释

1. 什么是网络 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同⼯作来完成业务&#xff0c;于是有了网络互连。 网络互连&#xff1a;将多台计算机连接在⼀起&#xff0c;完成数据共享。 数据共享本质是网络…

Android System Service系统服务--1

因为工作中经常需要解决一些framework层的问题&#xff0c;而framework层功能一般都是system service 的代理stub&#xff0c;然后封装相关接口&#xff0c;并提供给APP层使用&#xff0c;system service则在不同的进程中运行&#xff0c;这样实现了分层&#xff0c;隔离&#…

「 网络安全常用术语解读 」杀链Kill Chain详解

1. 简介 早在2009年&#xff0c;Lockheed Martin公司就提出了杀链(Kill Chain)理论&#xff0c;现在也称之为攻击者杀链(Attacker Kill Chain)。杀链其实就是攻击者进行网络攻击时所采取的步骤。杀链模型包括7个步骤&#xff1a;1侦察 -> 2武器化 -> 3交付 -> 4利用 …

不要长期把焦点放在让你烦恼的事情上

不要长期把焦点放在让你烦恼的事情上 在快节奏的生活中&#xff0c;我们经常会遇到各种各样让我们担心的事情。这些事情可能是工作上的压力&#xff0c;家庭中的矛盾&#xff0c;或者是个人的迷茫和困惑。然而&#xff0c;长期将焦点放在这些让我们烦恼的事情上&#xff0c;不…

PrestaShop购物系统 SQL注入漏洞复现(CVE-2023-30150)

0x01 产品简介 PrestaShop 是一个功能丰富,基于 PHP5 开发的 Web2.0 网上购物系统。PrestaShop 具有可定制,稳定等特点。整个系统只有 5.8MB,易于快速安装。 0x02 漏洞概述 PrestaShop 的部分主题中使用Leo Custom Ajax模块拓展,Leo Custom Ajax模块中可以在/modules/le…

JNPF低代码开发平台

一、关于低代码 JNPF平台在提供无代码&#xff08;可视化建模&#xff09;和低代码&#xff08;高度可扩展的集成工具以支持跨功能团队协同工作&#xff09;开发工具上是独一无二的。支持简单、快速地构建及不断改进Web端应用程序&#xff0c;可为整个应用程序的生命周期提供全…

HarmonyOS鸿蒙学习基础篇 - 项目目录和文件介绍

├── hvigor //存储购置信息的文件&#xff0c;主要用于发布打包 ├── idea //开发工具相关配置可忽略 ├── AppScope //工程目录 全局公共资源存放路径 │ └── resources │ │ └── base │ │ │ └── element //常亮存放 │ │ │ …

beego项目部署与热更新

1.开发自己的第一个项目 这里我引用的是在线聊天室&#xff0c;参考源码是https://github.com/beego/samples/tree/master/WebIM 在源码的基础上重新开发&#xff0c;整理项目发布到了liu289747235/WebIM 推荐下载源码&#xff1a;https://gitee.com/myselfyou/web-im 在线…

2023年12月青少年软件编程Python等级考试(六级)真题试卷

2023年12月青少年软件编程Python等级考试&#xff08;六级&#xff09;真题试卷 单选题 第 1 题 单选题 运行以下程序&#xff0c;输出的结果是&#xff1f;&#xff08; &#xff09; class A(): def __init__(self,x): self.xx1 def b(self): re…

游戏开发中的噪声算法

一、噪声 噪声是游戏编程的常见技术&#xff0c;广泛应用于地形生成&#xff0c;图形学等多方面。 那么为什么要引入噪声这个概念呢&#xff1f;在程序中&#xff0c;我们经常使用直接使用最简单的rand()生成随机值&#xff0c;但它的问题在于生成的随机值太“随机”了&#xf…

爬虫之牛刀小试(八):爬取微博评论

今天爬取的是微博评论。 可以发现其特点是下一页评论的max_id在上一页中。 于是代码如下&#xff1a; import requests import json import re import time headers {User-Agent: ,"Cookie": "","Referer": "https://m.weibo.cn/detail/4…

【想要安利给所有人的开发工具】最强工具ChatGPT——分享一些使用经验

目录 &#x1f525;个人使用ChatGPT的经验 &#x1f525;如何使用ChatGPT 方法一 方法二 &#x1f525;&#x1f525;提问技巧分享 1、英语翻译员 2、面试官 3、javascript 控制台 4、Excel表格 5、作曲家 6、辩手 7、小说家 8、诗人 9、数学老师 10、网络安全…

2023江苏职教高考计算机技能考试--填空题解析

/*--------------- 【程序填空】 ----------------- 题目&#xff1a;验证任意一个大于1的正整数都可以找到 一串连续奇数&#xff0c;它们的和等于该整数的立方。 例如&#xff1a;4的立方等于64&#xff0c;6413579111315程序运行结果如下&#xff1a;3的立方等于27&#xff…

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如&#xff1a;733be18b-7baf-d84c-879d-ca3db465f179太长了&#xff0c;修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…