angular-reactive-forms - 了解angular4中Validation类中的静态方法
问题描述
我开始以角度学习模型驱动形式,当我浏览模型驱动形式的文档时,我发现了这个
组件.ts
this.myForm= this.fb.group({
'contact':['',Validators.required]
});
现在,当我转到验证器类的定义时,我发现了这个
export declare class Validators {
...
static required(control: AbstractControl): ValidationErrors | null;
...
}
这解释了required 是验证器类中的一个静态方法,它需要一个 AbstractControl 作为参数。但是为什么我可以在不传递任何参数的情况下使用它。
解决方案
required 方法返回一个带有“required”属性的错误映射:{'required':true}
如果值为control: AbstractControl
空,null
如果不是。
.
从角度源代码: https ://github.com/angular/angular/blob/6.1.9/packages/forms/src/validators.ts#L133-L154
static required(control: AbstractControl): ValidationErrors|null {
return isEmptyInputValue(control.value) ? {'required': true} : null;
}
.
之所以可以不带括号和参数传递 Validators.required 是因为 Typescript 是 Javascript 的超集,可以将函数存储为变量:
var Foo = function (control: AbstractControl)
{
return anyVal;
};
是相同的:
Foo(control: AbstractControl): any
{
return anyVal;
};
所以这样做是完全有效的
var Bar = Foo;
而且因为函数只是一个保存可执行代码的变量,我们可以将函数存储在多个变量中,也可以将其作为参数传递,这就是在 FormControl 中所做的。
所以基本上,当你这样做时
const control = new FormControl('', Validators.required);
您没有执行所需的方法,因为仅在添加括号和参数时才执行方法。相反,您传递的是 Validator 函数本身。
推荐阅读
- vue.js - Vuex:为同一应用程序的大部分使用新商店?
- python - python中的AES/ECB/PKCS5Padding加密
- eclipse - 为什么在安装 Eclipse IDE 时出现错误?
- python - Pandas DataFrame 时间序列图中的错误
- html - 如何使我的页面响应我的手风琴?
- node.js - Node JS - 如何从异步函数中的查询中检索结果?
- c# - 反序列化对象数组
- node.js - 刷新服务器时控制台未更新,控制台日志未反映 Angular 中的更改
- javascript - 从 Analytics 的 Google API 外部数据 (JSON) 源创建 HTML 表
- python - 如何修复“ValueError:无法将字符串转换为浮点数”?