gpt4 book ai didi

Angular 形式验证 : compare two fields in different form groups

转载 作者:太空狗 更新时间:2023-10-29 17:58:14 25 4
gpt4 key购买 nike

如果它与某人的问题重复,我很抱歉。我没有找到解决问题的方法。

任何人都可以解释或举例说明如何比较一种形式但不同形式组中的两个字段吗?

下面是代码片段,用于查看我的表单和验证器的样子:

private createForm() {

const testGroups = {
groupOne: this.fb.group({
fieldOne: this.fb.control(null)
}),
groupsTwo: this.fb.group({
fieldTwo: this.fb.control(null, [this.matchValidator])
})
};

this.testForm = this.fb.group(testGroups);
}

matchValidator(from: FormControl): ValidatorFn {
return (to: AbstractControl): { [key: string]: any } => {
return from.value && to.value && from.value === to.value
? { fieldMatch: true }
: null;
};
}

最佳答案

matchValidator将由 Angular 而不是你调用。因此它无法访问组件的 this。 .

所以你必须绑定(bind)它。

您可以使用 get FormGroup 上的方法得到group1field的值(value):(<FormGroup>this.mainForm.get('group1')).get('field').value

试一试:

组件类:

import { Component } from '@angular/core';
import { FormGroup, FormBuilder, FormControl, ValidatorFn, AbstractControl } from '@angular/forms';

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
mainForm: FormGroup;

constructor(private fb: FormBuilder) { }

ngOnInit() {
this.mainForm = this.fb.group({
group1: this.fb.group({
field: []
}),
group2: this.fb.group({
field: [null, [this.matchValidator.bind(this)]]
})
});

}

matchValidator(control: AbstractControl): { [key: string]: boolean } | null {
const fromValue = control.value;
if(this.mainForm) {
const toValue = (<FormGroup>this.mainForm.get('group1')).get('field').value;
if (fromValue && toValue && fromValue === toValue) {
console.log('Control: ', control);
return { 'fieldMatch' : true };
}
console.log('Control: ', control);
return null;
}
}

get group2Field() {
return (<FormGroup>this.mainForm.get('group2')).get('field');
}
}

模板:

<form [formGroup]="mainForm">
<div formGroupName="group1">
<label for="">Group 1 Field</label>
<input type="text" formControlName="field">
</div>
<hr>
<div formGroupName="group2">
<label for="">Group 2 Field</label>
<input type="text" formControlName="field">
<p *ngIf="group2Field?.errors?.fieldMatch">These fields match</p>
</div>
</form>

这是一个 Sample StackBlitz供您引用。

关于 Angular 形式验证 : compare two fields in different form groups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53426241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com