当前位置: 首页 > 知识库问答 >
问题:

如何根据表单中的列表验证FormControl值

宋子辰
2023-03-14

是否可以使用自定义验证器将表单字段的输入与列表进行比较?我并不是试图比较两个表单控件。

我一直在尝试这种方法:

this.formGroupName = this.formBuilder.group({
    category: ['', Validators.compose([Validators.required, this.checkCategoryInput(
      this.formGroupName.get['category'].value, this.categoryList)])]
});

其中,在检查类别输入()方法中,我将比较类别表单控件的值与可接受类别的列表。

public checkCategoryInput(input: string, categoryList: any[]): {[key: string]: boolean} | null{
  console.log(input);
  console.log(categoryList);
  return null;
}

然而,我在语法中迷失了方向,并在尝试用这种方法时出现了一些错误。有人有更好的方法将表单控件值与列表进行比较吗???

共有1个答案

申屠黎昕
2023-03-14

你很接近,你是对的;语法有点混乱。自定义验证器应该是一个验证器fn方法,该方法将使用参数AbstractControl调用。例如,下面是一个非常基本的验证器:

public static numeric(control: AbstractControl): { [key: string]: any } {
    return /^[0-9]+$/.test(control.value) ? null : { 'numeric': false };
}

// .. { category: [0, Validators.required, numeric] }

我们只需将该方法的引用传递给FormBuilder,它将调用传递FormControl来验证该值。

如果您想用验证器包装您自己的一些参数,只需创建您自己的函数范围并返回一个新方法:

public static checkCategoryInput(input: string, categoryList: any[]): ValidatorFn {
    return (control: AbstractControl): { [key: string]: any } => {
        const val = control.value;
        return 'Do stuff with the value because `input` and `categoryList` are now in scope!'
    }
}

只是一点额外的信息,因为它也不是真的说得很好的地方;{[key:string]:boolean}null的返回签名将放在ngControlerrors属性上,因此如果它有效,通常返回null,如果无效,则返回errorName:false。如果您试图显示基于此特定验证器的错误消息,请记住这一点。

 类似资料:
  • 我有一个电子邮件地址字段,其中有一个客户端验证,不允许几个临时域,如tempmailder.com或dispostable.com. 在服务器端,我使用了fluent验证来指定验证规则。 web中不允许的临时域。将文件配置为逗号分隔的字符串。 我是否可以指定一种方法来验证用户根据不允许的电子邮件域列表输入的值。 谢啦

  • 问题内容: 下面的代码对于执行基本的必需表单验证似乎效果很好。 当该字段是脏的+无效且为 Great 时,该表单将显示红色的 Name required 消息 。 如果该字段是脏的+有效消息。 但是,对于表单中的每个字段重复此代码是很混乱的: 我希望能够以更简单的方式指定和属性。 问题答案: 一种方法是将验证表达式抽象到范围方法: 控制者

  • 问题内容: 页面包含如下表格。 1)如果我插入表单 validate =“ true” ,则在页面加载此表单后,将请求提交到邮件操作(此时尚未创建验证xml)。 2)创建验证xml后(与动作相同),然后向该页面的控制请求返回的动作返回404页面。 我错过了什么? 验证XML 如果我不添加验证,那么一切都会正常进行。 struts.xml 问题答案: 是Struts2提供的预定义结果之一; 基本上,

  • CodeIgniter 提供了一个全面的表单验证和数据预处理类以帮助缩减你所写的代码。 概述 表单验证指南 表单 成功页面 控制器 设置验证规则 使用一个数组设置验证规则 级联规则(Cascading Rules) 预处理数据(Prepping Data) 重新填充表单(Re-populating the Form) 回调 设置错误信息 更改错误定界符 翻译表单域名字 独立显示错误 将一系列验证规

  • 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 authorize 绝不 使用 authorize() 方法来做用户授权,用户授权我们会单独使用 Policy 授权策略 来实现。 使用基类 所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php 基类。基类文件如下: <?php n

  • 这里有一个drools新手,下面是java类结构。 我必须编写一些代码来验证drools中的PersonalAddress。规则1。如果person有PersonalAddress实例列表,如果其中一个是AddressType==当前和timeAtAddress 规则2。如果上述条件为true,那么我想获取PersonalAddress实例,其中AddressType==PREVIOUS, Dro