任何人都可以在以下lambda函数中进行解释吗?
如果表单的field1
和field2
具有相同的值,则此函数应将'mismatchedFields'设置为true / false并将其作为对象返回:
function matchingFields(field1, field2) {
return form => {
if(form.controls[field1].value !== form.controls[field2].value)
return { mismatchedFields: true }
}
}
它在Angular形式验证器中使用,如下所示:
export class NewUserComponent {
private form: any;
constructor(private fb: FormBuilder) {
this.form = fb.group({
password: '',
passwordConfirm: ''
}, { validator: matchingFields('password', 'passwordConfirm')})
}
}
我不知道'matchingFields'
在哪里将变量'form'
提供给第一个'return'
返回的lambda函数
任何人都可以解释该lambda函数的功能吗?
谢谢。
答案 0 :(得分:2)
设置时
validator: matchingFields('password', 'passwordConfirm')
您调用函数matchingFields
,该函数从中返回另一个函数( arrow / lambda function )。调用之后,您可以认为您有一个类似的函数,该函数是从matchingFields
返回的。
function someFunction(form) {
var field1 = 'password';
var field2 = 'passwordConfirm';
if(form.controls[field1].value !== form.controls[field2].value)
return { mismatchedFields: true }
}
现在在formGroup
中,您将得到类似
validator: someFunction
您刚刚将validator
的引用设置为函数someFunction
,该引用是matchingFields
的返回值。现在,Angular
在验证阶段将自动调用此函数,并且form
参数将自动传递给该函数。 form
是运行验证的那个。
答案 1 :(得分:2)
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)
答案 2 :(得分:1)
下面是一个如何调用它的示例:
// The function from the question
function matchingFields(field1, field2) {
return form => {
if (form.controls[field1].value !== form.controls[field2].value)
return {
mismatchedFields: true
}
}
}
// A simplified version of the FormGroup object
const form = {
controls: {
a: {
value: 'test'
},
b: {
value: 'test2'
}
}
};
// as form.a.value !== form.b.value the validator should not be undefined
console.log(matchingFields('a', 'b')(form));