Sha*_*mor 1 validation angular
如果选中复选框,我想要设置输入.验证工作正常,但当我取消选中复选框时,我删除了所需的验证.但表单无效,保存按钮未启用.
在这里我的formbuilder.
this.filterForm = this.formBuilder.group(
{
has_not_visited_in_days_group: this.formBuilder.group({
has_not_visited_in_days: [false],
has_not_visited_in_days_input: [''],
}, {validator: this.requiredIfHasNotVisitedChecked}),
});
Run Code Online (Sandbox Code Playgroud)
这里有自定义验证器功能
requiredIfHasNotVisitedChecked(control: AbstractControl): void {
const input = control.get('has_not_visited_in_days_input').value;
const inputCheckbox = control.get('has_not_visited_in_days').value;
control.get('has_not_visited_in_days_input').setValidators([]);
if (inputCheckbox) {
if (input === '' || input === null) {
control.get('has_not_visited_in_days_input').setValidators([Validators.required]);
}else {
control.get('has_not_visited_in_days_input').setValidators([]);
}
}else{
control.get('has_not_visited_in_days_input').setValidators([]);
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过了
control.get('has_not_visited_in_days_input').setValidators(null);
Run Code Online (Sandbox Code Playgroud)
提前致谢.有任何想法请帮助我.
我没有看到你需要自定义验证器,你可以只依靠一个简单的更改事件:
在这里,我喜欢通过使用变量缩短组件中的表单控件,以便它们更容易使用,因为属性路径可能会变得很长.以下是两个控件:
this.inputCtrl = this.filterForm.get('has_not_visited_in_days_group.has_not_visited_in_days_input')
this.checkboxCtrl = this.filterForm.get('has_not_visited_in_days_group.has_not_visited_in_days')
Run Code Online (Sandbox Code Playgroud)
然后是复选框的更改事件:
<input (change)="check(checkboxCtrl.value)" type="checkbox" formControlName="has_not_visited_in_days"/>
Run Code Online (Sandbox Code Playgroud)
就像Amit提到的那样,您需要更新表单控件的值和有效性.这是和检查复选框状态并相应更新验证器的函数:
check(bool) {
if (bool) {
this.inputCtrl.setValidators([Validators.required])
} else {
this.inputCtrl.setValidators(null)
}
this.inputCtrl.updateValueAndValidity();
}
Run Code Online (Sandbox Code Playgroud)
这只是一个建议,并提出了我个人更喜欢的选项.
但是如果您更喜欢自定义验证器,那么请继续(Amit的答案),只需添加updateValueAndValidity类似的建议.
| 归档时间: |
|
| 查看次数: |
4551 次 |
| 最近记录: |