2017-01-10 2 views
1

Я хотел бы проверить, имеют ли две формы один и тот же контент, используя валидаторы с угловым коэффициентом 2. Как я могу получить доступ к значению одной формы из функции валидатора другой формы?Доступ к другой форме внутри валидатора в угловом формате 2

Пусть я создал форму, как это:

let registerForm = formBuilder.group({ 
    field1: [''], 
    field2: ['', sameThanfield1], 
}); 

sameThanfield1() является функцией валидатора, содержащий этот код, который не будет работать, хотя, потому что я не имею доступа к значению другого вида. Как я могу это решить?

sameThanfield1(form: FormControl): any { 

    if(form.field1 !== form.field2) { 
     return { 
      "not the same": true 
     }; 
    } 
    return null; 
} 
+0

Посмотрите на ответ я дал подобный вопрос [здесь] (http://stackoverflow.com/questions/38204812/angular2-forms-validator-with-interrelated-fields/40416197 # 40416197) ... Это немного длинный ветер, но это лучший способ повторного использования этой ИМО. –

+0

Чтобы уточнить заголовок этого вопроса - в вашем коде, похоже, у вас есть только одна форма *, но два разных элемента управления. Валидация между двумя формами будет намного сложнее. – Katana314

ответ

1

Я понимаю, что вы хотите проверить, имеют ли два поля одинаковое значение.

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

@Component({ 
// ... 
}) 
export class ExampleComponent implements OnInit { 

    registerForm: any; 

    ngOnInit() { 
     this.registerForm = formBuilder.group({ 
      field1: [''], 
      field2: ['', this.sameAsField1], 
     }); 
    } 

    sameAsField1(control: formControl) { 

     if (this.registerForm && control.value === this.registerForm['field1'].value) { 
      return { 
       "not the same": true 
      }; 
     } 

     return null; 

    } 
} 
+0

Это дает мне: «ИСКЛЮЧЕНИЕ: Невозможно прочитать свойство« registerForm »неопределенного» – Sina

+0

Валидатор выполняется, когда форма не определена. Обновлен код. –

+0

Также это возвращает исключение: «Невозможно прочитать свойство« registerForm »неопределенного« – Sina

0

Я нашел другое решение, однако без валидаторов. Он контролирует значение Changes Observable.

@Component({ 
// ... 
}) 
export class ExampleComponent implements OnInit { 

registerForm: any; 
passError: boolean = false; 

ngOnInit() { 
    this.registerForm = this.formBuilder.group({ 
     field1: [''], 
     field2: ['', this.sameAsField1], 
    }); 

    this.registerForm.valueChanges.subscribe(function(){ 
     if(this.registerForm.value.field1 !== this.registerForm.value.field2) passError = true; 
    }); 

} 

}

Смежные вопросы