按钮按下时的 Angular7 表单验证或 属性 不在 html 中
Angular7 Form Validation on button push or property not in html
我有一个带按钮的嵌套表单组 ("Confirm"),我希望父表单在按下子表单上的按钮之前无效。然而,验证器似乎是严格为输入设计的。
是否可以仅按下按钮或根本不在我的 html 中的 属性 进行表单验证?
我已经尝试使用以下代码,但感觉我找错了树。
像这样的自定义验证器:
function isConfirmedValidator(confirmed: boolean): ValidatorFn {
return (c: AbstractControl): { [key: string]: boolean } | null => {
if (confirmed) {
return null;
} else {
return { "notConfirmed": true };
}
};
}
本地道具:
isConfirmed = false;
按钮连接到这个:
onConfirm = () => {
this.isConfirmed = true;
}
初始化嵌套表单:
this.nestedForm = this.formBuilder.group({}, isConfirmedValidator(this.isConfirmed));
编辑:我是否应该在我的 html 中有一个绑定到 formControl 的隐藏字段?看起来太老套了,但也许是最干净的方法?
您可以在表单中添加所需的控件,并在用户单击按钮时为其设置值:
TS:
userForm: FormGroup = this.fb.group({
name: ['My name', [Validators.required]],
button: [null, [Validators.required]],
});
HTML:
<button type="button" (click)="userForm.get('button').setValue(true)">
Click required
</button>
我有一个带按钮的嵌套表单组 ("Confirm"),我希望父表单在按下子表单上的按钮之前无效。然而,验证器似乎是严格为输入设计的。
是否可以仅按下按钮或根本不在我的 html 中的 属性 进行表单验证?
我已经尝试使用以下代码,但感觉我找错了树。
像这样的自定义验证器:
function isConfirmedValidator(confirmed: boolean): ValidatorFn {
return (c: AbstractControl): { [key: string]: boolean } | null => {
if (confirmed) {
return null;
} else {
return { "notConfirmed": true };
}
};
}
本地道具:
isConfirmed = false;
按钮连接到这个:
onConfirm = () => {
this.isConfirmed = true;
}
初始化嵌套表单:
this.nestedForm = this.formBuilder.group({}, isConfirmedValidator(this.isConfirmed));
编辑:我是否应该在我的 html 中有一个绑定到 formControl 的隐藏字段?看起来太老套了,但也许是最干净的方法?
您可以在表单中添加所需的控件,并在用户单击按钮时为其设置值:
TS:
userForm: FormGroup = this.fb.group({
name: ['My name', [Validators.required]],
button: [null, [Validators.required]],
});
HTML:
<button type="button" (click)="userForm.get('button').setValue(true)">
Click required
</button>