首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取表单控件的名称

获取表单控件的名称
EN

Stack Overflow用户
提问于 2017-12-15 21:03:12
回答 5查看 22.3K关注 0票数 10

我在angular中使用反应式表单,我需要比较开始日期"start date“和结束日期"end date",这两个控件都在"dateLessThan”函数中验证,但问题是我不知道如何要求控件正在求值

代码语言:javascript
运行
复制
//Some stuff
public fechaInicio = new FormControl('', [
    Validators.required    
    , this.dateLessThanTo

]);
public fechaFin = new FormControl('', [
    Validators.required     
    , this.dateLessThan
]);



 createForm() {
    this.contratoForm = this.formBuilder.group({    
        fechas: this.formBuilder.group({
            fechaInicio: this.fechaInicio,
            fechaFin: this.fechaFin
        }, { validator: this.dateLessThan('fechaInicio', 'fechaFin') }),          

    });
}

这里我需要知道用于比较日期的控件的名称:

代码语言:javascript
运行
复制
 dateLessThanTo(fieldControl: FormControl) {
    //
    //if (fechaInicio.value > FechaFin.value){
    //      return true;
    //}
    //else{
    //  return false;
    //  }

}

//Some stuff
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-12-15 21:11:39

在您的自定义验证器中,您将获得formGroup fechas,因此您不需要从TS代码传递任何参数:

代码语言:javascript
运行
复制
 createForm() {
    this.contratoForm = this.formBuilder.group({    
        fechas: this.formBuilder.group({
            fechaInicio: this.fechaInicio,
            fechaFin: this.fechaFin
        }, { validator: this.dateLessThanTo }),          

    });
}

在您的自定义验证器中:

代码语言:javascript
运行
复制
dateLessThanTo(group: FormGroup) {
   if (group.controls.fechaInicio.value > group.controls.fechaFin.value){
     return {notValid: true}
   }
   return null;
}

你需要在有效的时候返回null,并设置一个错误,例如当错误无效时返回notValid

票数 4
EN

Stack Overflow用户

发布于 2018-05-10 04:55:08

从控件中获取父组,然后与当前控件进行比较:

代码语言:javascript
运行
复制
  dateLessThanTo(control: AbstractControl) { 
    let name = this.getName(control);

    ...
  }

  private getName(control: AbstractControl): string | null {
    let group = <FormGroup>control.parent;

    if (!group) {
      return null;
    }

    let name: string;

    Object.keys(group.controls).forEach(key => {
      let childControl = group.get(key);

      if (childControl !== control) {
        return;
      }

      name = key;
    });

    return name;
  }
票数 7
EN

Stack Overflow用户

发布于 2019-11-29 19:03:49

在您的组件中,您可以添加一个自定义验证器,如下所示

代码语言:javascript
运行
复制
static customValidator(control: AbstractControl): { [key: string]: any } {
const controlName = (Object.keys(control.parent.controls).find(key => control.parent.controls[key] === control));
if (control.value === 0) {
  return {key: {error: 'invalid'}};
}
return null; }

在controlName中,您将获得控件的名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47832981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档