Angular 函数返回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

有人能解释一下下面的lambda函数吗

如果表单的
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发送?