热门标签 | 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();
}
});
}

推荐阅读
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 本文详细解析了JavaScript中节点属性的应用,包括如何通过标签、属性和文本节点来获取和操作DOM元素。具体介绍了`nodeType`属性,其中1表示元素节点,2表示属性节点,3表示文本节点。此外,还探讨了`nodeName`和`nodeValue`等重要属性的使用方法及其在实际开发中的应用场景。 ... [详细]
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社区 版权所有