Angular 函数返回lambda函数-lambda函数从何处获取输入?
有人能解释一下下面的lambda函数吗 如果表单的Angular 函数返回lambda函数-lambda函数从何处获取输入?,angular,typescript,lambda,Angular,Typescript,Lambda,有人能解释一下下面的lambda函数吗 如果表单的field1和field2具有相同的值,则此函数应将“不匹配字段”设置为true/false,并将其作为对象返回: function matchingFields(field1, field2) { return form => { if(form.controls[field1].value !== form.controls[field2].value) return { mismatch
field1
和field2
具有相同的值,则此函数应将“不匹配字段”设置为true/false,并将其作为对象返回:
function matchingFields(field1, field2) {
return form => {
if(form.controls[field1].value !== form.controls[field2].value)
return { mismatchedFields: true }
}
}
它用于角度形式验证器,如下所示:
export class NewUserComponent {
private form: any;
constructor(private fb: FormBuilder) {
this.form = fb.group({
password: '',
passwordConfirm: ''
}, { validator: matchingFields('password', 'passwordConfirm')})
}
}
我不明白'matchingFields'
在哪里向第一个'return'
中返回的lambda函数提供变量'form'
有人能解释一下这个lambda函数的功能吗
谢谢。当您设置此选项时
validator: matchingFields('password', 'passwordConfirm')
调用函数matchingFields
,从中返回另一个函数(arrow/lambda函数)。在此调用之后,您可以考虑您有这样的函数,它从<代码>匹配字段返回。
function someFunction(form) {
var field1 = 'password';
var field2 = 'passwordConfirm';
if(form.controls[field1].value !== form.controls[field2].value)
return { mismatchedFields: true }
}
在表单组中
现在您将有如下内容
validator: someFunction
您刚刚将validator
的引用设置为函数someFunction
,这是从matchingFields
返回的函数。现在,在验证阶段,Angular
将自动调用此函数,form
参数将自动传递给该函数。此表单是运行验证的表单。设置此表单时
validator: matchingFields('password', 'passwordConfirm')
调用函数matchingFields
,从中返回另一个函数(arrow/lambda函数)。在此调用之后,您可以考虑您有这样的函数,它从<代码>匹配字段返回。
function someFunction(form) {
var field1 = 'password';
var field2 = 'passwordConfirm';
if(form.controls[field1].value !== form.controls[field2].value)
return { mismatchedFields: true }
}
在表单组中
现在您将有如下内容
validator: someFunction
您刚刚将validator
的引用设置为函数someFunction
,这是从matchingFields
返回的函数。现在,在验证阶段,Angular
将自动调用此函数,form
参数将自动传递给该函数。此表单
是验证运行的表单。表单生成器
会调用随后的回调(即内部)
matchingFields
定义只是此定义的一般化版本:
…
constructor(private fb: FormBuilder) {
this.form = fb.group({
password: '',
passwordConfirm: ''
}, {
validator: form => {
if (form.controls['password'].value !== form.controls['passwordConfirm'].value) {
return { mismatchedFields: true }
}
}
})
}
因此,我将想象在FormBuilder.group(a,b)
中发生以下情况:
b.validator(this.internalFormReference)
FormBuilder
调用回调函数(即内部回调函数)
matchingFields
定义只是此定义的一般化版本:
…
constructor(private fb: FormBuilder) {
this.form = fb.group({
password: '',
passwordConfirm: ''
}, {
validator: form => {
if (form.controls['password'].value !== form.controls['passwordConfirm'].value) {
return { mismatchedFields: true }
}
}
})
}
因此,我将想象在FormBuilder.group(a,b)
中发生以下情况:
b.validator(this.internalFormReference)
下面是如何调用它的运行示例:
//问题中的函数
函数匹配字段(字段1、字段2){
返回表格=>{
if(form.controls[field1].value!==form.controls[field2].value)
返回{
不匹配字段:true
}
}
}
//FormGroup对象的简化版本
常数形式={
控制:{
a:{
值:“测试”
},
b:{
值:“test2”
}
}
};
//作为形式a.值!==form.b.value验证程序不应未定义
log(匹配字段('a','b')(表单))代码>以下是如何调用它的运行示例:
//问题中的函数
函数匹配字段(字段1、字段2){
返回表格=>{
if(form.controls[field1].value!==form.controls[field2].value)
返回{
不匹配字段:true
}
}
}
//FormGroup对象的简化版本
常数形式={
控制:{
a:{
值:“测试”
},
b:{
值:“test2”
}
}
};
//作为形式a.值!==form.b.value验证程序不应未定义
log(匹配字段('a','b')(表单))
表单
与参数字段1
和字段2
没有区别-它们是在调用函数时提供的matchingFields
不提供参数form
,因为它不调用lambda。form
与参数field1
和field2
没有区别-它们是在调用函数时提供的matchingFields
不提供参数form
,因为它不调用lambda。我知道输入参数“form”在调用“Validator(form)”时由Angular发送?我知道输入参数“form”在调用“Validator(form)”时由Angular发送?