📅  最后修改于: 2020-12-16 09:57:35             🧑  作者: Mango
角形用于处理用户的输入。我们可以在应用程序中使用Angular表单,使用户能够登录,更新配置文件,输入信息以及执行许多其他数据输入任务。
在Angular 7中,有两种方法可以通过表单来处理用户的输入:
两种方法都用于从视图中收集用户输入事件,验证用户输入,创建要更新的表单模型和数据模型以及提供跟踪更改的方法。
响应式表单和模板驱动的表单都以不同的方式管理和处理数据。每个都有不同的优势。
Comparison Index | Reactive Forms | Template-driven Forms |
---|---|---|
Setup (form model) | Reactive forms are more explicit. They are created in component class. | Template-driven forms are less explicit. They are created by directives. |
Data model | Structured | Unstructured |
Predictability | Synchronous | Asynchronous |
Form validation | Functions | Directives |
Mutability | Immutable | Mutable |
Scalability | Low-level API access | Abstraction on top of APIs |
响应式和模板驱动形式共享一些构建基块:
表单模型设置用于跟踪Angular表单和表单输入元素之间的值更改。让我们来看一个示例,看看如何定义和创建表单模型。
有关使用反应式形式实现的单个控件,请参见以下带有输入字段的组件。
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
@Component({
selector: 'app-reactive-favorite-color',
template: `
Favorite Color: `
})
export class FavoriteColorComponent {
favoriteColorControl = new FormControl('');
}
在反应形式中,形式模型是真理的源头。真理的来源提供了表单元素在给定时间点的价值和地位。
在上面的示例中,表单模型是FormControl实例。
在反应形式中,表单模型在组件类中明确定义。之后,反应式表单指令(此处为:FormControlDirective)使用值访问器(ControlValueAccessor实例)将现有FormControl实例链接到视图中的特定表单元素。
参见上面与上述组件相同的组件,该组件的输入字段用于使用模板驱动的表单实现的单个控件。
import { Component } from '@angular/core';
@Component({
selector: 'app-template-favorite-color',
template: `
Favorite Color: `
})
export class FavoriteColorComponent {
favoriteColor = '';
}
在模板驱动的形式中,真理的来源是模板本身。
表单模型抽象可简化结构。模板驱动的表单指令NgModel为给定的表单元素创建和管理FormControl实例。它不太明确,但是删除了对表单模型的直接控制。