发表在

角训练

5个使用Angular FormControl的技巧

我们经常了解到Angular提供了两种处理表单的选项:模板驱动或响应式(或者这两个!)

在某些情况下,小表单(例如,登录屏幕、单个文本输入或单个下拉列表)不需要那么冗长。

在这篇文章中,我们将看看5个简单而有价值的功能FormControl对象单独使用,而不为表带来任何额外配置。

1.在单个元素上使用FormControl而不使用FormBuilder

当我们有一个或两个表单元素时,创建一个FormControl对象,并将其绑定到HTML元素非常简单,可以完成工作。

在组件类中,我们所需要的是:

myControl = newFormControl(“默认值”);

在我们的HTML模板中:

< input type = " text "[formControl] = " myControl "/>

就是这样!不需要ngModel指令或FormBuilder服务。我们现在可以访问该控件的值myControl.value,如下面的完整代码示例所示:

2.获取控件的状态:原始-脏-有效-无效-触碰-未碰

Angular有六个有价值的属性FormControl对象:

  • 原始的:当用户未更改元素值时,为
  • 脏:相反的原始的-当用户更改了元素值时为true
  • 有效:当元素值对应用于该元素的所有验证规则都有效时,为
  • 无效:相反的有效的-当元素值无效时为true
  • 感动:当用户将焦点放在元素上(比如点击它),然后从元素上移除焦点(点击离开它)时为True。
  • 没有:相反的感动了-表示用户还没有将焦点放在元素上或还没有删除该焦点。

属性上可以访问这六个属性FormControl对象,可用于向用户显示反馈,如错误消息或提示:

myControl" / >
< p >有效:{{myControl.valid}} < / p >
< p >感动:{{myControl.touched}} < / p >
< p >脏:{{myControl.dirty}} < / p >

下面是一个完整的例子:

这六个属性也会被Angular自动设置为CSS类在form元素上。因此,为这些属性添加一些CSS类实现是向用户提供可视化反馈的最简单方法:

.ng-invalid {
背景颜色:粉色;
.ng-dirty {
背景颜色:浅灰色;

你可以试试上面的例子。首先,清除文本输入(需要一个值)以查看应用了ng-invalid类(粉红色背景色),并在输入中输入任何内容以使其变脏(应用浅灰色背景色)。

3.决定何时使用updateOn更新FormControl值

默认情况下,FormControl将在用户更改HTML表单元素值时更新其值。

在某些情况下,我们可能希望等待该更新来触发验证和值更新。这就是updateOn财产就是一切。我们可以使用以下三个选项之一来延迟FormControl更新过程:

  • 模糊- - -FormControl当HTML元素模糊事件发送时,值更新(元素失去焦点)
  • 提交- - -FormControl值在HTML元素表单提交时更新。
  • 改变—默认行为。用户更新实时反映为FormControl价值。

updateOn属性传递为控制选项

myControl = new FormControl('默认值',{updateOn: 'blur'});

你可以用下面Stackblitz中的完整例子来测试这个例子:

4.重置为初始值,而不是使用initialValueIsDefault清除表单

HTML表单在重置时的默认行为是清除该表单中的所有值。

在某些情况下,如果我们在编辑模式下显示表单(比如用户正在使用它来编辑他们的个人资料信息),在进行任何编辑之前重置到值可能会很方便,而不是清除整个表单。

这就是initialValueIsDefault控件选项非常有意义的地方:

myControl = new FormControl('val',{initialValueIsDefault: true});

在对表单控件进行编辑后,重新设置表单将恢复到初始值,而不是清除输入。

你可以在下面的例子中尝试两种不同的行为:

5.使用valueChanges和statusChanges观察对象订阅表单更新

当我们需要使用RxJs操作符对表单更新做出反应时(例如,触发HTTP请求或过滤掉来自另一个可观察对象的列表),从我们的FormControl可以很方便。

的公共属性FormControl

  • valueChanges-在所有值更新发生时立即发出
  • statusChanges-当用户更改表单控件值时,发出所有状态更新(VALID或INVALID)

我们可以在组件类中订阅它们,也可以在HTML模板中使用async管道:

值变化:{{myControl。valueChanges| async}}


状态改变:{{myControl。statusChanges| async}}

我叫betway必威滚球.我是Angular的谷歌开发专家,也是角训练在那里我帮助web开发团队学习并熟悉Angular。

如果您在网页开发方面需要任何帮助,请随时与我们联系!

如果你喜欢这篇文章,请鼓掌或分享。你的帮助我永远感激。你也可以点击此处订阅Medium

使用Medium应用程序

一个写着“在应用商店下载”的按钮,如果点击它将引导你进入iOS应用商店
一个写着“开始吧,谷歌Play”的按钮,如果点击它,就会引导你进入谷歌Play商店
Baidu
map