基于其他字段值的Angular 2验证?

4

我想基于其他字段验证表单字段的值,因此我编写了一个自定义验证器,但当我尝试获取其他字段的值时,它会抛出错误。我尝试了以下代码,请帮帮我,谢谢!

   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”的属性,因为其未定义。


eventname 是以组的形式存在于 this.eventForm 中,而不是你正在传递的控件中。 - developer033
我需要将 this.eventform 传递给 totaluser() 函数吗? - Arun Kumaresh
无需操作,您只需要按照以下方式使用:this.eventForm.get('eventname').value - developer033
当我在totaluser函数中使用this.eventForm.get('eventname').value时,它会显示属性'eventForm'不存在。 - Arun Kumaresh
奇怪。您的类里面漏掉了添加 eventForm: Formgroup; 了吗? - developer033
是的,我已经添加了,请查看我的更新问题。 - Arun Kumaresh
1个回答

7

我目前也在做类似的事情。为了让它工作,我获取控件的组并在该组中搜索所需的控件。

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

2
似乎验证器运行了多次,甚至在字段初始化时也是如此,所以我得到了错误:无法读取未定义的属性'controls'。因此,需要先验证父级不是未定义的,然后再进行验证。 - Mateo Tibaquira
eventname的值改变时,这段代码无法正常工作。它只会在表单控件totaluser的值改变时进行验证。 - Arun Redhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接