Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将验证程序添加到formGroup,而不删除以前添加的验证程序_Angular_Angular Forms - Fatal编程技术网

Angular 将验证程序添加到formGroup,而不删除以前添加的验证程序

Angular 将验证程序添加到formGroup,而不删除以前添加的验证程序,angular,angular-forms,Angular,Angular Forms,是否有任何方法可以在不删除之前添加的任何验证器的情况下,向表单组添加并仅添加验证器 假设我有一个大的FormGroup,在某个点上我需要添加一个自定义验证器setValidators删除可能已添加到其中的任何验证器formGroup.serValidators([customValidation,fromGroup.validator])在自定义验证null中创建组。有什么想法吗 到目前为止,我得到的是: const customValidation(thing,otherThing):vali

是否有任何方法可以在不删除之前添加的任何验证器的情况下,向表单组添加并仅添加验证器

假设我有一个大的FormGroup,在某个点上我需要添加一个自定义验证器
setValidators
删除可能已添加到其中的任何验证器
formGroup.serValidators([customValidation,fromGroup.validator])
在自定义验证
null
中创建
组。有什么想法吗

到目前为止,我得到的是:

const customValidation(thing,otherThing):validator fn{
//如果我使用formGroup.serValidators([customValidation,fromGroup.validator]),则该组为null
return(group:FormGroup):ValidatorErros | null=>{
…验证资料
}
添加CustomValidator的方法(formGroup){
formGroup.serValidators([customValidation,fromGroup.validator]);
formGroup.updateValueAndValidity();
}
编辑:我得到了一些很好的问题和建议。我只是想让它与我的架构一起工作。我想知道有没有什么方法可以:

formGroup.validator?
formGroup.validator.push(customValidation):
formGroup.setValidators(customValidation);
formGroup.updateValueAndValidity();

^这就是答案

我建议将您的validators数组存储在一个单独的变量中,在运行时随意填充它,然后执行传递该变量的setValidators。对于要考虑的新验证程序集,还应使用UpdateValueandValidation

formGroup: FormGroup;
validators: ValidatorFn[] = [Validators.required];

constructor(fb: FormBuilder) {
  this.formGroup = fb.group({
    field: ['', validators];
  });
}

ngOnInit() {
  this.addValidator(Validators.minLength(2));
  this.updateFieldValidation(this.formGroup.controls.field);
}

addValidator(validator: ValidatorFn) {
    this.validators.push(validator);
}

updateFieldValidation(control: AbstractControl) {
  control.setValidators(this.validators);
  control.updateValueAndValidity();
}


可能
formGroup.setValidators([customValidation,…formGroup.validators])
验证程序
可能为空。这是不可编辑的。对我来说,更改验证程序没有意义。为什么不让你的自定义验证程序考虑可能的条件?自定义验证程序是一个利基验证程序。我不希望它在formGroup的所有实例上启动。谢谢,但我们的体系结构无法做到这一点。那就是formGroup分布在微服务和应用程序之间。不在单个组件中,甚至不在模块中。formGroup像一个单体还是重复的?它是一个单体。我想我的欣赏是在哪里存储可以添加且可访问的验证程序。有没有办法只
formGroup.validators.push(customvValidator)
使用空检查?是的,您可以将singleton类用作服务,并将addValidator函数公开。然后该函数应触发值和有效性更新,以便更新formGroup。但当前的验证程序仍应存储在该服务中。如果不清楚,我可以编写代码