угловая проверка 2 на основе другого значения поля?

Я пытаюсь проверить значение поля формы на основе другого поля, поэтому я написал собственный валидатор, когда пытался получить значение другого поля, которое выдает ошибку, я пробовал следующий код, пожалуйста, помогите мне заранее спасибо

   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


person Arun Kumaresh    schedule 12.04.2017    source источник
comment
eventname находится в группе форм с именем this.eventForm, а не в элементах управления формой, которые вы передаете.   -  person developer033    schedule 12.04.2017
comment
поэтому мне нужно передать this.eventform в totaluser() ??   -  person Arun Kumaresh    schedule 12.04.2017
comment
нет, вам просто нужно использовать следующее: this.eventForm.get('eventname').value.   -  person developer033    schedule 12.04.2017
comment
когда я использую this.eventForm.get('eventname').value внутри функции totaluser, он говорит, что свойство "eventForm" не существует   -  person Arun Kumaresh    schedule 12.04.2017
comment
Странный. Вы пропустили добавление eventForm: Formgroup; в свой класс?   -  person developer033    schedule 12.04.2017
comment
да, я добавил, см. мой обновленный вопрос   -  person Arun Kumaresh    schedule 12.04.2017


Ответы (1)


Я сейчас тоже занимаюсь чем-то подобным. Чтобы заставить его работать, я получаю группу для элемента управления, а затем ищу в этой группе необходимый элемент управления.

totaluser(control : AbstractControl) : {[s:string ]: boolean} {
  const group = control.parent;
  if (group) {
    console.log(group.controls['eventname'].value)
  }
  return null;
}
person Fairlie Agile    schedule 13.04.2017
comment
кажется, что валидатор запускается более одного раза, в том числе при инициализации поля, поэтому я получил ошибку: Cannot read property 'controls' of undefined. Итак, сначала нужно убедиться, что родитель не является неопределенным, а затем подтвердить. - person Mateo Tibaquira; 26.04.2017
comment
Это не работает при изменении значения eventname. Он будет проверяться только тогда, когда значение этого элемента управления формой, т.е. totaluser , изменится - person Arun Redhu; 02.06.2018