angular表单的一些概念和方法

这篇具有很好参考价值的文章主要介绍了angular表单的一些概念和方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

UntypedFormGroup

UntypedFormGroup 是一个类型安全的 FormGroup,它是一个表单控件容器,用于组织和管理一组表单控件

markAsPristine() 方法用于将 FormGroup 标记为 “pristine”(未修改)状态。这意味着表单控件的值没有被修改过。通常在表单提交后或者在重置表单时使用该方法来重置表单状态。

updateValueAndValidity() 方法用于更新 FormGroup 及其下所有的控件的验证状态。它会触发验证规则对每个控件进行验证,并根据验证结果更新控件的 validinvalidtouched 以及 dirty 状态。

markAsPristine() 方法和 updateValueAndValidity() 方法是 FormGroup 提供的两个常用方法,用于管理和操作表单控件的状态和验证。

import { FormGroup, FormControl } from '@angular/forms';

// 创建一个 FormGroup
const formGroup = new FormGroup({
  name: new FormControl(''),
  email: new FormControl('')
});

// 将 FormGroup 标记为 pristine
formGroup.markAsPristine();

// 更新 FormGroup 及其下所有控件的验证状态
formGroup.updateValueAndValidity();

2 如何实现表单自定义验证

<form [formGroup]="myForm" (ngSubmit)="onSubmit()">
    <div class="form-item">
        <div>
            <label for="username">用户名:</label>
            <input type="text" id="username" formControlName="username" >
        </div>
        <div *ngIf="myForm.get('username')?.invalid && myForm.get('username')?.touched" class="error">用户名不能为空</div>
    </div>
    <div  class="form-item">
        <div>
            <label for="password">密码:</label>
            <input type="password" id="password" formControlName="password" >
        </div>
        <div *ngIf="myForm.get('password')?.invalid && myForm.get('password')?.touched" class="error">
            密码必须包含英文大小写并且长度在8到12之间
        </div>
    </div>
   
    <div  class="form-item">
        <div>
            <label for="phone">手机号:</label>
            <input type="text" id="phone" formControlName="phone" >
        </div>
        <div *ngIf="myForm.get('phone')?.invalid && myForm.get('phone')?.touched" class="error">
            手机号必须是11位数字且第二个数字不能是2
        </div>
    </div>
    <div  class="form-item">
        <button type="submit">提交</button>
    </div>
  

  </form>
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators ,FormControl} from '@angular/forms';
import { Observable, of } from 'rxjs';

@Component({
  selector: 'app-formpage',
  templateUrl: './formpage.component.html',
  styleUrls: ['./formpage.component.less']
})
export class FormpageComponent {
  myForm:FormGroup;
  constructor(private fb:FormBuilder){
    this.myForm=this.fb.group({
      username:['',Validators.required],
      password:['',Validators.required,this.passwordValidator],
      phone:['',Validators.required,Validators.pattern(/^1[^2]\d{9}$/)],
    })
  }
  validateField(field:string){

    const control=this.myForm.get(field);
    console.log("control:",control)
    if(control?.invalid){
      control.markAllAsTouched()
    }
  }

  // 异步密码验证器函数
  passwordValidator(control: FormControl): Promise<{ [key: string]: boolean } | null> {
      const value = control.value;
      const valid =  value.length >= 8 && value.length <= 12;
      console.log("control.value:",control.value)
      return new Promise((resolve,reject)=>{
            if (!valid) {
              resolve({ invalidPassword: true });
            } else {
              resolve(null);
            }
      })
}
  onSubmit(){
    if(this.myForm.valid){
      console.log("this,.form.value",this.myForm.value)
    }else{
      console.log("--invaid--")
      console.log("this,.form.value",this.myForm.value)
      this.myForm.markAllAsTouched()
    }
  }
}

注意一点:验证函数如果通过要返回null,所以我们验证函数最后的返回值一定要考虑null这个值。也就是passwordValidator(control: FormControl): Promise<{ [key: string]: boolean } | null>

提交的时候如果没有通过需要给表单调用markAllAsTouched()方法。这样会展示错误信息文章来源地址https://www.toymoban.com/news/detail-556222.html

到了这里,关于angular表单的一些概念和方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

    🎉欢迎来到Java学习路线专栏~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水

    2024年02月11日
    浏览(38)
  • 前端框架之争:Vue.js vs. React.js vs. Angular

    🎉欢迎来到Web前端专栏~前端框架之争:Vue.js vs. React.js vs. Angular ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果

    2024年02月07日
    浏览(82)
  • 如何使用前端框架(React、Angular、Vue.js等)?该如何选择?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月07日
    浏览(47)
  • 前端js常用的一些工具类

    ip 封装ajax工具类 日期工具类 数据工具类 时间工具类 上述工具类extends.js 工具类

    2024年02月16日
    浏览(37)
  • 前端JS实用操作符,一些骚操作✨

             目录 0、!!  双重逻辑非操作符  📚 1、?? 操作符 空值合并/空判断  ✅ 2、?. 可选链运算符🔍 3、??= 操作符 逻辑空值赋值运算符 💚 4、三元运算符 📗 5、~~ 操作符 双位运算符 🔨 6、与 ||或 短路运算符 🚂 7、| 0 取整 🚁 8、 1 判断奇偶数 🎨 9、_ 数值分割

    2024年02月14日
    浏览(35)
  • Node.js和浏览器在JavaScript运行环境方面存在一些区别和联系

    Node.js和浏览器在JavaScript运行环境方面确实存在一些区别和联系。 首先,让我们理解一下Node.js和浏览器的运行环境。Node.js是一个基于Chrome的V8引擎的服务器端JavaScript运行环境,允许开发者在服务器端运行JavaScript代码,并且提供了一系列的内置模块,如fs模块用于文件系统操

    2024年03月14日
    浏览(37)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(35)
  • 前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

    他们这样形容我 是暴雨浇不灭的火                                                       —— 24.4.18 学习目标         理解                 HTML的概念                 HTML的分类                 HTML的关系                 HTML的语义化         应用

    2024年04月23日
    浏览(40)
  • 前端配置化表单组件设计方法

    一、背景 前端开发中涉及表单的页面非常多,看似功能简单,开发快速,实则占去了很大一部分时间。当某个表单包含元素过多时还会导致html代码过多,vue文件过大。从而不容易查找、修改和维护。为了提高开发效率及降低维护成本,下面介绍表单配置化组件的封装原理与

    2024年02月03日
    浏览(19)
  • 零基础学前端(二)用简单案例去理解 HTML 、CSS 、JavaScript 概念

    该篇适用于从零基础学习前端的小白 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 HTML,CSS,JavaScript 都是单独的语言;他们构成前端技术基础; (1)HTML:负责网页的架构; (2)CSS:负责网页的样式,美化; (3)JavaScript(JS):负责

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包