我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Angular中表单的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Angular中表单的示例分析

这篇文章主要介绍Angular中表单的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Angular 表单


什么是模板式表单

表单的数据模型是通过组件模板中的相关指令来定义的, 因为使用这种方式定义表单的数据模型时, 我们会受限于 HTML 的语法, 所以模板驱动方式只适合用于一些简单的场景。

什么是响应式表单

响应式表单提供了一种模型驱动的方式来处理表单输入, 其中的值会随时间而变化。 使用响应式表单时, 通过编写 TypeScript 代码而不是 HTML 代码来创建一个底层的数据模型, 在这个模型定义好以后, 使用一些特定的指令, 将模板上的 HTML 元素与底层的数据模型连接在一起。
注意:

  • 数据模型并不是一个任意的对象, 它是一个由 angular/forms 模块中的一些特定的类, 如 FormControl, FormGroup, FormArray 等组成的。 在模板式表单中, 是不能直接访问到这些类的。

  • 响应式表单并不会替你生成 HTML, 模板仍然需要自己来编写。

  • 模板式表单中, 是不能访问数据模型的相关类的, 只能拿到表单最终的数据; 在响应式表单中, 是可以访问数据模型相关的类, 但由于它们是不可引用的, 故不能在模板中进行操作, 只能在 TypeScript 代码中进行操作。

响应式表单

Angular中表单的示例分析

FormGroup

FormGroup 既可以代表表单的一部分, 又可以代表整个表单, 它是多个 FormControl 的集合。 FormGroup 将多个 FormControl 的值和状态聚合在一起, 在表单校验中, 如果FormGroup 中有一个 FormControl 是无效的, 那整个 FormGroup 都是无效的。

FormControl

FormControl 是构成表单的基本单位, 通常情况下用来代表一个 input 元素, 但是也可以用来代表一个更复杂的组件, 如日历, 下拉选择框。 FormControl 保存着与其关联的 HTML 元素的当前值以及元素的校验状态, 还有元素是否被修改过等信息。

FormArray

FormArray 与 FormGroup 类似, 但是它有长度属性。 一般来说, FormGroup 用来代表整个表单或者表单字段的一个固定子集; 而 FormArray 通常用来代表一个可以增长的字段集合。

表单校验

Angular 内置校验器

Angular为我们提供了几个内置校验器, 下面是比较常用的校验器:

  • Validators.required - 表单控件值非空

  • Validators.email - 表单控件值的格式是 email

  • Validators.minLength() - 表单控件值的最小长度

  • Validators.maxLength() - 表单控件值的最大长度

  • Validators.pattern() - 表单控件的值需匹配pattern对应的模式(正则表达式)

自定义响应式表单校验器

在实际的开发中, 为了满足项目的需求, 我们需要自定义一些校验器。 一般情况下, 可以将校验函数定义成如下形式:

xxxxValidator(control: AbstarctControl): {[key: string]: any} {          // TODO 编写校验规则         return null;   }

下面以常见的注册页面为例:

初始化表单

ngOnInit(): void {       this.formModel = this.fb.group({    username: ['', [Validators.required, Validators.minLength(6)]],    // 密码    passwordsGroup: this.fb.group({            password: [''],         passwordConfirm: ['']        }, { validator: this.equalValidator }),            // 手机号            mobile: ['', this.moblieValidator]  }); }

编写校验器

// 手机号码校验moblieValidator(control: AbstractControl): any {     const reg = /^((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8}$/;     const valid = reg.test(control.value);     console.log('mobile的校验结果:', valid);    return valid ? null : { mobile: true };}// 密码校验equalValidator(group: FormGroup): any {     const password = group.get('password') as FormControl;     const passwordConfirm = group.get('passwordConfirm') as FormControl;     const valid = password.value === passwordConfirm.value;     console.log('密码校验结果', valid);     return valid ? null : { equal: true };}

Angular 异步校验器

Angular的表单 API 还支持异步校验器, 异步校验器可以调用远程的服务来检查表单的字段的值。 异步校验器与普通校验器类似, 也是一个方法, 唯一不同的是异步校验器返回的不是一个对象, 而是一个可观测的流。

moblieAsyncValidator(control: AbstractControl): Observable<any> {     const reg = /^((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8}$/;     const valid = reg.test(control.value);     console.log('mobile的校验结果:', valid);    return of(valid ? null : { mobile: true });  }

Angular 状态字段

  • toucheduntouched

这两个字段表示用户是否访问过字段, 也就是这个字段是否获得焦点。 一般用于表单错误提示信息是否显示。 同时, 如果有任何一个字段是 touched, 那整个表单的 touched 属性就是 true; 只有所有字段是 untouched 时, 整个表单的 untouched 属性才是 true。

  • pristinedirty

如果一个字段的值从来没有改变过, 那么它的 pristine 就是 true, dirty 就是 false; 反之, 如果字段的值被修改过, 那么它的pristine 就是 false, dirty 就是 true。 同时, 如果任何一个字段是 dirty, 那么整个表单的 dirty 属性就是 true; 只有所有字段是 pristine 时, 整个表单的 pristine 属性才是 true。

  • pending

当一个字段处于异步校验时, 该字段的 pending 属性是 true。

自定义模板式表单的校验器

在响应式表单里, 我们后台有一个编码的数据模型, 只需要将校验器的方法挂在指定字段属性上就可以了。 但是, 在模板式表单里, 后台是没有这类数据模型的, 指令才是唯一能用的东西, 所以我们需要将校验方法包装成指令, 然后才能在模板中使用它。

编写指令

@Directive({     selector: '[mobile]',     providers: [{provide: NG_VALIDATORS, useValue: moblieValidator, multi: true}]}) export class MobileValidatorDirective {      constructor() { } } // html中引用<div>  手机号:<input ngModel type="number" name="mobile" mobile required></div>

mutli: true :指的是在 NG_VALIDATORS 这个 Token 下可以挂不同 useValue 属性所表示的值。

注意: 在模板式表单中, 是不可以在模板中使用字段的状态属性的。 模板式表单与响应式表单不同, 它的模型的值和它状态的变更是异步的, 而且很难控制。
如果想要使用字段的状态属性,我们可以进行如下操作:

// .html文件中<div>     用户名:<input ngModel type="text" minlength="6" name="username" (input)="onUsernameInput(myForm)" required></div><div [hidden]="usernameValid || usernameUntouched">      <div [hidden]="!myForm.form.hasError('required', 'username')">      用户名是必填项!    </div>      <div [hidden]="!myForm.form.hasError('minlength', 'username')">      用户名长度至少是6位!    </div></div>// .ts文件中usernameValid = true; usernameUntouched = true; onUsernameInput(form: NgForm): void {     if (form) {      this.usernameValid = form.form.get('username').valid;          console.log('valid', this.usernameValid);                this.usernameUntouched = form.form.get('username').untouched;         console.log('untouched',   this.usernameUntouched);    }}

以上是“Angular中表单的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Angular中表单的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Angular中表单的示例分析

这篇文章主要介绍Angular中表单的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 表单什么是模板式表单表单的数据模型是通过组件模板中的相关指令来定义的, 因为使用这种方式定义表单的数据模型时
2023-06-14

Angular中NgModule的示例分析

这篇文章主要介绍了Angular中NgModule的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本篇文章带大家详细了解一下Angular中的NgModule(模块)
2023-06-14

Angular中Change Detection的示例分析

这篇文章主要介绍Angular中Change Detection的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ChangeDection检测程序内部状态,然后反映到UI上。引起状态变化,引发检查的驱动源:E
2023-06-06

Angular中Component/Service的示例分析

小编给大家分享一下Angular中Component/Service的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关于Angular Componentcss样式的作用域、Shadow DOMShadow DOM
2023-06-15

Angular中Route路由的示例分析

这篇文章主要介绍Angular中Route路由的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 路由(Route)我们可以将路由器理解成控制整个应用状态的视图对象, 每个应用都有一个路由器; 路
2023-06-14

Angular中$injector对象的示例分析

这篇文章给大家分享的是有关Angular中$injector对象的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。$injector其实是一个IOC容器,包含了很多我们通过.module()和$provid
2023-06-15

Angular中组件@Component的示例分析

这篇文章主要介绍Angular中组件@Component的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 概述组件是 Angular 应用的主要构造块。每个组件包括如下部分:一个 HTML 模板,用于声明
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录