gpt4 book ai didi

javascript - Angular 2 : Add validators to ngModelGroup

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

我正在使用 ngModelGroup 指令将多个表单输入组合在一起。

在文档 ( https://angular.io/docs/ts/latest/api/forms/index/NgModelGroup-directive.html ) 中,我读到有一个 validators: any[] 属性。

这是否意味着我可以添加一个自定义验证器函数,它只验证那个 ngModelGroup ?如果可以,我该如何使用它?

那太棒了,因为我想检查是否至少选中了 ngModelGroup 中的一个复选框。我不能使用 required,因为那意味着所有 复选框都是必需的。我在文档中找不到任何相关信息,还是我找错地方了?

最佳答案

这完全可以通过 ngModelGroup 和用于验证的自定义指令来实现。理解为什么这样做的关键是 ngModelGroup

Creates and binds a FormGroup instance to a DOM element.

首先,我们将构建我们的指令,它是漂亮的样板文件,没有什么特别的:

@Directive({
selector: '[hasRequiredCheckboxInGroup]',
providers: [{provide: NG_VALIDATORS, useExisting: HasRequiredCheckBoxInGroup, multi: true}]
})
export class HasRequiredCheckBoxInGroup implements Validator, OnChanges {
private valFn = Validators.nullValidator;

constructor() {
this.valFn = validateRequiredCheckboxInGroup();
}

validate(control: AbstractControl): {[key: string]: any} {
return this.valFn(control);
}
}

我们的验证函数是我们获取关键知识的地方,即 ngModelGroup 创建一个 FormGroup 并应用它:

function validateRequiredCheckboxInGroup() : ValidatorFn {
return (group) => { //take the group we declare in the template as a parameter
let isValid = false; //default to invalid for this case
if(group) {
for(let ctrl in group.controls) {
if(group.controls[ctrl].value && typeof group.controls[ctrl].value === 'boolean') { // including a radio button set might blow this up, but hey, let's be careful with the directives
isValid = group.controls[ctrl].value;
}
}
}

if(isValid) {
return null;
} else {
return { checkboxRequired: true };
}
}
}

最后,在我们的模块中包含并声明指令后,我们返回到模板(需要在表单中):

<form #f="ngForm">
<div ngModelGroup="checkboxes" #chks="ngModelGroup" hasRequiredCheckboxInGroup>
<input type="checkbox" name="chk1" [(ngModel)]="checks['1']"/>
<input type="checkbox" name="chk2" [(ngModel)]="checks['2']"/>
</div>
<div>
{{chks.valid}}
</div>
</form>

这里有一个 plunker,所有这些都可以玩: http://plnkr.co/edit/AXWGn5XwRo60fkqGBU3V?p=preview

关于javascript - Angular 2 : Add validators to ngModelGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40612483/

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