Angular 表单

  angular提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单。二者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改的途径。

  响应式表单和模板驱动表单在处理和管理表单和表单数据方面有所不同,各有优势。

  •   响应式表单更健壮:可扩展性、可复用性和可测试性更强。(如果表单时应用中的关键部分,或者要使用响应式编程模式来构建应用,可以使用响应式表单。)
  •   模板驱动表单在往应用中添加简单的表单时非常有用(比如:邮件列表的登记表单),它们很容易添加到应用中,但是不想响应式表单一样容易扩展。(如果表单需求比较简单,或者逻辑比较清晰,可以使用模板驱动表单)

响应式表单和模板驱动表单的关键差异

  响应式 模板驱动
建立(表单模式) 显示,在组件类中创建 隐私,由组件创建
数据模式 结构化 非结构化
可预测性 同步 异步
表单验证 函数 指令
可变性 不可变 可变
可伸缩性 访问底层api 在api之上抽象

响应式表单和模板驱动表单的共同基础

二者共享了一些底层构造块:

  • FormControl 实例 用于追踪单个表单控件的值和验证状态。
  • FormGroup 用于追踪一个表单控件组的值和状态。
  • FormArray 用于追踪表单控件数组的值和状态。
  • ControlValueAccessor 用于在Angular的FormControl实例和原生DOM元素之间创建一个桥梁。

建立表单模型

响应式表单和模板驱动表单都是用表单模型来跟踪Angular表单和表单输入元素之前值的变化。

在响应式表单中建立:

下面是一个带有输入字段的组件,它使用响应式表单实现了单个控件。

import { Component } from '@angular/core';
import { FormControl } from '@angular/forms'; @Component({
selector: 'app-reactive-favorite-color',
template: `
Favorite Color: <input type="text" [formControl]="favoriteColorControl">
`
})
export class FavoriteColorComponent {
favoriteColorControl = new FormControl('');
}

权威数据源负责提供在指定时间点上表单元素的值和状态。在响应式表单中,表单模式充当权威数据源。上面代码中的表单模型就是FormControl的实例。

reactive forms:响应式表单

form control instance:窗体控件实例

direct access to FormControl instance after link is created by FormControlDirective:在由FormControlDirective创建链接后直接访问FormControl实例

在响应式表单中,表单模型是显式定义在组件类中的。然后,响应式表单指令(这里是FormControlDirective)会把这个现有的表单实例通过数据访问器(ControlValueAccessories的实例)来指派给视图中的表单元素。

在模板驱动表单中建立:

下面是一个带有输入字段的组件,使用模板驱动表单实现了单个控件。

import { Component } from '@angular/core';

@Component({
selector: 'app-template-favorite-color',
template: `
Favorite Color: <input type="text" [(ngModel)]="favoriteColor">
`
})
export class FavoriteColorComponent {
favoriteColor = '';
}

在模板驱动表单中,权威数据源是模板。

Can only access FormControl instance via NgModal directive:只能通过NgModal指令访问FormControl实例

表单模型中的抽象促进了结构的简化。模板驱动表单的NgModal指令负责创建和管理指定表单元素上的表单控件实例,它不那么明显,但是不必直接操纵表单模型。

表单中的数据流

在处理表单输入时,两种表单遵循两种不同的策略。

响应式表单中的数据流:待续

模板驱动表单中的数据流:待续

表单验证

验证是任何表单必备的部分,Angular提供了一组内置的验证器,并提供了创建自定义验证器的功能。

  • 响应式表单把自定义验证器定义成函数,以要验证的控件作为参数。
  • 模板驱动表单和模板指令紧密相关,并且必须提供包装了验证函数的自定义验证器指令(什么意思?没明白)

测试

可变性

可伸缩性

Angular表单 (一)表单简介的更多相关文章

  1. jQuery Form 表单提交插件----Form 简介,官方文档,官方下载地址

     一.jQuery Form简介 jQuery Form插件是一个优秀的Ajax表单插件,可以非常容易地.无侵入地升级HTML表单以支持Ajax.jQuery Form有两个核心方法 -- ajaxF ...

  2. 走进AngularJs 表单及表单验证

    年底了越来越懒散,AngularJs的学习落了一段时间,博客最近也没更新.惭愧~前段时间有试了一下用yeoman构建Angular项目,感觉学的差不多了想做个项目练练手,谁知遇到了一系列问题.yeom ...

  3. 走进AngularJs(九)表单及表单验证

    年底了越来越懒散,AngularJs的学习落了一段时间,博客最近也没更新.惭愧~前段时间有试了一下用yeoman构建Angular项目,感觉学的差不多了想做个项目练练手,谁知遇到了一系列问题.yeom ...

  4. SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

    SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...

  5. Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)

    一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.m ...

  6. JavaScript 客户端JavaScript之Document对象中的表单和表单元素

    Form对象 代表一个HTML表单(document可以有多个表单元素) 表单访问 document.form[document.forms.length-1] 访问表单元素 document.for ...

  7. bootstrap 基础表单 内联表单 横向表单

    bootstrap 基础表单 内联表单 横向表单 <!DOCTYPE html> <html> <head> <title></title> ...

  8. 统一修改表单参数(表单提交的空字符串统一转null)

    统一修改表单参数(表单提交的空字符串统一转null) 1.介绍: 我们业务中有时会遇到提交的表单中某个参数为空字符串,导致后台接受的为空字符串("")而不是我们理想中的null,会 ...

  9. Day055--MySQL--外键的变种,表与表的关系,单表查询,多表查询, 内连接,左右连接,全外连接

    表和表的关系 ---- 外键的变种 * 一对多或多对一 多对多 一对一 参考 https://www.cnblogs.com/majj/p/9169416.html 如何找出两张表之间的关系 分析步骤 ...

  10. 第九课 表单及表单控件 html5学习4

    表单有由表单域.提示文本.表单3部分构成 一.表单控件 input 控件 1.<input />单标签2.input属性: 可以通过type属性变换形状 value默认值 name名称 c ...

随机推荐

  1. 跟 Task 有关的 Intent对象中设置的Flag

    FLAG_ACTIVITY_BROUGHT_TO_FRONT      这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定. FLAG_ACTIVI ...

  2. MinGW 安装与简单实例

    MinGW的下载 链接: https://pan.baidu.com/s/1JiZoyFHUWoeaxCQcUXCKgg 密码: myh3 MinGW的安装 基本上都是按提示的点击下一步操作 接下来修 ...

  3. 拓扑排序--P2881 [USACO07MAR]排名的牛Ranking the Cows

    *传送 FJ想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛(1 ≤ N ≤ 1,000).FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系.每一对关系表示为“X Y”,意指X的 ...

  4. JavaScript 的一些SAO操作

    IE判断检测 jQuery 在 1.9 版本之前,提供了一个浏览器对象检测的属性 .browser 的替代方案.于是各种利用 IE bug 的检测方法被搜了出来: // IE 678 最短方法 var ...

  5. Centos7搭建SVN服务

    1.安装 subversion ​[root@CentOS var]# yum -y install subversion 2.创建 svn 版本库,初始化相关配置文件 ​[root@CentOS v ...

  6. 对jsp中的js进行调试的方法

    在js中 输入debugger 就可以了

  7. 五十八、SAP中常用预定义数据类型

    一.SAP中常用预定义数据类型 注意事项如下: 1.默认的定义数据类型是CHAR. 2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断. 3.C类型,可以赋值数值,也可以赋值字符,还可以混合 ...

  8. 050-PHP除法运算

    <?php $n=10/3; //除法运算 echo $n; //输出变量n的值 ?>

  9. zoj 1483 划分类DP

    还是看了little_w大神写的才知道怎么写,看完发现自己题意也理解错了,里面有个neighboring,意思就是你指定任务的时候指定的是原序列中连续的一段 然后就是怎么DP了,新学了个很好的dp模型 ...

  10. javaweb历史上最简单的使用Ajax判断用户名是否被注册(不跳转页面奥!)

    关于前端: 使用jquery-3.3.1.js记得要导入奥---最后我会附加我的源码的 哎我也不多说了新手加菜鸟jquery真的不太懂!看代码吧!个别地方我会写上我对本程序的理解. 关于后台也就是se ...