首页 > 解决方案 > Angular:从 FormControl 获取所有验证器的列表

问题描述

我在这里可能错了,但经过一番研究,似乎不可能从 FormControl 中提取验证器列表

const ctrl = new FormControl(null,[Validators.minLength(8), Validators.required]});

我想要一个包含这些验证器的列表,所以我可以做这样的事情(理论上)

const validators = ctrl.getValidators();
ctrl.setValidators( [...validators, myOwnValidator]);

理想情况下,我想附加一个验证器,但据我所知,这是不可能的。

我在互联网上找到了两个访问 FormControl 验证器的建议:

1)

const validator = ctrl.validator('' as any as AbstractControl);
// -> {required: true}
  1. const validator = ctrl.validator({} as AbstractControl); // -> {必需:真}

这两个选项的作用完全相同,它们返回一个只有一个 keyrequired和一个 value的对象true。不是很有用,因为我看不到有关其他验证器的任何信息,并且我需要验证器类(因为我需要再次设置验证器)。

到目前为止我发现的东西不是很有用,所以我想知道我是否错过了一些东西。所以任何帮助将不胜感激!

标签: angularangular-reactive-formsangular-forms

解决方案


Angular 12.2.0的解决方案

this.form.controls["firstName"].addValidators([Validators.minLength(1), Validators.maxLength(30)]);

在此处输入图像描述

角度 11 及以下的解决方案

您可以将特定控件的验证器定义为变量,然后重用它

public ctrlDefaultValidators = [Validators.minLength(8), Validators.required];
public ctrl = new FormControl(null, ctrlDefaultValidators});

ctrl.setValidators( [...ctrlDefaultValidators , myOwnValidator]);

ps:别忘了打电话updateValueAndValidity


推荐阅读