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

Angular相应式表单基本例子

1、案例需求表单提交,表单悉数校验胜利才提交,当表单校验毛病,表单边框变红,同时有毛病提醒信息,有重置功用2、代码剖析在线预览git堆栈本案例中运用了相应式表单,相应式表单在表单的
1、案例需求

表单提交,表单悉数校验胜利才提交,当表单校验毛病,表单边框变红,同时有毛病提醒信息,有重置功用

2、代码剖析
  • 在线预览
  • git堆栈

本案例中运用了相应式表单,相应式表单在表单的校验方面异常轻易

2.1、注册 ReactiveFormsModule

要运用相应式表单,就要从 @angular/forms 包中导入 ReactiveFormsModule 并把它增加到你的 NgModule 的 imports 数组中。

app.module.ts

imports: [
BrowserModule,
AppRoutingModule,
ReactiveFormsModule
]

2.2、运用 FormBuilder 来天生表单控件

当须要与多个表单打交道时,手动建立多个表单控件实例会异常烦琐。FormBuilder 效劳供应了一些便利方法来天生表单控件。FormBuilder 在幕后也运用一样的体式格局来建立和返回这些实例,只是用起来更简朴。

  • 注入 FormBuilder 效劳

constructor(
private fb: FormBuilder
) { }

  • 天生表单控件

FormBuilder 供应了一个语法糖,以简化 FormControl、FormGroup 或 FormArray 实例的建立历程。它会削减构建庞杂表单时所需的榜样代码的数目(new FormControl)。

formGroup: FormGroup;
this.formGroup = this.fb.group({
name: '',
age: '',
sex: ''
});

2.3、FormGroupDirective

formGroup 是一个输入指令,它接收一个 formGroup 实例,它会运用这个 formGroup 实例去婚配 FormControl、FormGroup、FormArray 实例,所以模版中的 formControlName 必需和 formGroup 中的 name 婚配。




formCOntrolName="name">

{{nameErrorMessage}}



2.4、表单状况

每一个表单控件都有本身的状况,共五个状况属性,都是布尔值。

  • valid 表单值是不是有用
  • pristine 表单值是不是未转变
  • dirty 表单值是不是已转变
  • touched 表单是不是已被访问过
  • untouched 表单是不是未被访问过

以输入姓名的表单为例,只考证该表单的必填项时。表单先猎取核心而且输入姓名,末了移除核心,每一步表单的状况以下:

初始状况
状况
validfalse
pristinetrue
dirtyfalse
touchedfalse
untouchedtrue
输入状况
状况
validtrue
pristinefalse
dirtytrue
touchedfalse
untouchedtrue
落空核心后状况
状况
validtrue
pristinefalse
dirtytrue
touchedtrue
untouchedtrue

2.5、表单校验

表单考证用于考证用户的输入,以确保其完全和准确。Angular内置的了一些校验器,如 Validators.required, Validators.maxlength,Validators.minlength, Validators.pattern,然则不能自定义毛病提醒信息,所以实用性不强,满足不了营业场景的需求,因而我们能够自定义表单校验器。

自定义表单校验器

name-validator.ts

import { AbstractControl, ValidatorFn } from '@angular/forms';
export function nameValidator(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
if (!control.value) {
return { message: '请输入必选项' };
}
if (control.value.length > 10) {
return { message: '称号大于10位了' };
}
return null;
};
}

运用自定义考证器

app.component.ts

this.formGroup = this.fb.group({
name: ['', nameValidator()],
age: ['', ageValidator()],
sex: ['', sexValidator()]
});

显现毛病提醒信息

当页面初始化的时刻不应该显现毛病信息,也就是表单touched为true

// Error
private errorMessage(name): string {
const cOntrol= this.formGroup.controls[name];
return (control.touched && control.invalid) ? control.errors.message : '';
}

但是touched只需落空核心才为true,在输入的时刻一向为false。致使在输入的时刻,表单校验毛病,却显现不了毛病信息。因而须要再次推断 dirty 状况,只需表单值转变,则为false

private errorMessage(name): string {
const cOntrol= this.formGroup.controls[name];
return ((control.touched || control.dirty) && control.invalid) ? control.errors.message : '';
}

2.6、markAsTouched

未对表单操纵时,点击提交按钮时,则模仿表单被touched,显现提醒信息

markFormGroupTouched(formGroup: FormGroup) {
(Object).values(formGroup.controls).forEach(item => {
if (item.controls) {
this.markFormGroupTouched(item);
} else {
item.markAsTouched();
}
});
}

推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
author-avatar
老王福_640
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有