在前端领域中,使用表单处理用户输入是常见的操作,可以使用表格让使用者登录、输入信息以及其他数据输入的任务,Angular提供了两种通过表单处理用户输入的方法:reactive
与template
,这两种方法,此篇章将会介绍他们之间的差异与用途。
reactive与template以不同的方式处理表单讯息,他们拥有各自的优劣势:
直接且显性
的访问,他的可扩充性、可重用性、可测试性都比template更高。... | Reactive | template |
---|---|---|
建立表单模型 | 在class中建立 | 在template中建立 |
资料模型 | 不可变 | 可变 |
可预测性 | 同步 | 非同步 |
验证 | function | 指令 |
Reactive与Template都会追踪使用者互动的表单输入元素
和元件模型中的表单资料的变更
,他们共用同一套底层模块
,不同的是他们在建立和管理表单的方面不同。
reactive和template都透过以下几本的class建立:
若要使用reactive forms,可以在Component中定义form model,[formControl]会使用internal value accessor
将画面中特定表单元素与FormControl连接起来。
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]指令将画面中的input元件与Component中的FormControl物件连接起来,换句话说当使用者在画面上的input中输入值,会透过[formControl]将使用者输入的值传递给Conponent中的FormControl物件。
(图片来源:Angular)
由於Template forms的表单形式是隐性的,所以所以需要透过NgModel
来建立并管理FormControl。
import { Component } from '@angular/core';
@Component({
selector: 'app-template-favorite-color',
template: `
Favorite Color: <input type="text" [(ngModel)]="favoriteColor">
`
})
export class FavoriteColorComponent {
favoriteColor = '';
}
在template form中,透过NgModel将使用者输入的数值连接到Component中的FormControl。
(图片来源:Angular)
Angular必须在我们使用form的时候将画面与Componet中的model保持同步,举例来说当使用者在画面中更改了表单中的资料时,新的值必须要立马反映在model中,同样的当model中的逻辑改变时,其结果也需要立即的反应在画面中,Reactive与Template在处理使用者或程序更改的方式有所不同。
在reactive forms中,画面里的每一个表单元素都直接的连接到FormControl,画面与model的之间的数据更新是同步的,下图表示当画面更改元件中的数值时数据是如何流动到FromControl中。
(图片来源:Angular)
输入事件
。Control Value Accessor
会监听这个表单元件上的事件,并立即
将新的值传递给Component中的FormControl。valueChange
这个可观察物件发送这个新的值给valueChange的订阅者。下图是介绍FormControl的值被更改後,如何将更改的值反映到画面中。
(图片来源:Angular)
在template forms中的每个表单元件都会连接到内部管理表单模型的指令。
下图说明了当更改画面元件後,更新的数值是如何流向model。
(图片来源:Angular)
Model.viewModelUpdate()
,发出一个ngModelChange
事件。下图说明当修改Component中的this.favoriteColor後,画面中的input表单是如何更新新值。
(图片来源:Angular)
非同步
更改FormControl值的任务放入伫列中。新的
数据模型而不是更新现有的数据模型,这使变更检测更有效率,因为只需要在唯一性更改(物件参考发生变化)时进行更新。参考文献:Angular
选择排序法的概念是,将阵列分为两个部分,每次扫描未排序的部分时,从数列中拿出最小的数,丢到另一边,...
「错误」的定义 重复上章节对「好奇心」的心理假设: 大脑只有在感知到预测和实际认知有缺口时,才会启动...
延续 https://ithelp.ithome.com.tw/articles/10261533...
我们今天要来设定 PBR,我们以 Juniper MX 为例 首先,我们要先决定一个 routing...
在Day5的时候,主要介绍了SELECT语句,在当中也有提及多种资料表合并的语法,这篇文会列出一些简...