【问题标题】:angular 2 validation based on other field value?基于其他字段值的角度2验证?
【发布时间】:2017-09-08 01:39:47
【问题描述】:

我正在尝试根据其他字段验证表单字段值,因此我编写了一个自定义验证器,当我尝试获取其他字段的值时它会抛出错误我尝试了以下代码,请帮助我提前感谢

   export class CreatesessionComponent implements OnInit {

      eventform : FormGroup ;

     constructor(private formBuilder: FormBuilder) {

       }


      ngOnInit() {

       this.eventform = this.formBuilder.group({
          eventname : new FormControl(''[Validators.required,Validators.pattern('[A-Za-z]+')]), 
          userlive : new FormControl('',[Validators.required,this.maxuser]),
          totaluser :new FormControl('',[Validators.required,this.totaluser])

       });
      }

totaluser(control : FormGroup) : {[s:string ]: boolean} {
  console.log(control.controls['eventname'].value)
//  if(control.value > 20){
//    return { total : true };
//  }
return null;
}

在控制台中出现错误,因为无法读取 'eventname' undefined 的属性

【问题讨论】:

  • eventname 在名为 this.eventForm 的表单中,而不是在您传递的表单控件中。
  • 所以我需要将 this.eventform 传递给 totaluser() ??
  • nop,你只需要如下使用:this.eventForm.get('eventname').value.
  • 当我在 totaluser 函数中使用 this.eventForm.get('eventname').value 时,它​​说属性 'eventForm' 不存在
  • 奇怪。你错过了在课堂上添加eventForm: Formgroup; 吗?

标签: angular angular2-forms angular2-formbuilder


【解决方案1】:

我目前也在做这样的事情。为了让它工作,我得到了控件组,然后在该组中搜索所需的控件

totaluser(control : AbstractControl) : {[s:string ]: boolean} {
  const group = control.parent;
  if (group) {
    console.log(group.controls['eventname'].value)
  }
  return null;
}

【讨论】:

  • 验证器似乎运行了不止一次,在初始化字段时也是如此,所以我得到了错误:Cannot read property 'controls' of undefined。所以,需要先验证 parent 不是 undefined,然后再验证。
  • eventname 的值改变时,这不起作用。它只会在此表单控件的值(即totaluser )更改时验证
猜你喜欢
  • 2015-07-24
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2019-07-04
  • 2023-03-10
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多