Проверки в угловых реактивных формах - PullRequest
1 голос
/ 26 сентября 2019

У меня есть поле в моей реактивной угловой форме, и я пытаюсь добавить проверки к нему.В моем классе обслуживания я могу использовать Validators.required, который по умолчанию предоставляется angular следующим образом:

Countrycode: new FormControl('', [Validators.required, Validators.maxLength(12)])

Но условие таково: если страна Канада, тогда этот Validators.required должен работать еще Validators.requiredне нуженЕсли страна отличается от Канады, требуется только проверка maxLength, как было сделано выше.Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

В дополнение к ответу Ирвинга вы можете подписаться на изменение FormControl, используя это:

this.form.get('CountryCode').valueChanges.subscribe(val => {
    onChangeCountry(val);
});

Однако вместо того, чтобы прислушиваться к изменениям, лучше всего внедрить собственную функцию проверки как частьконтроля:

Countrycode: new FormControl('', [countryValidator, Validators.maxLength(12)])


export function countryValidator(control: AbstractControl) {
     if (otherValue == 'Canada' && !control.Value) {
        //validation fails
        return { invalid: true };
     }
     //validation passes
     return null;
  };
}

HTH

1 голос
/ 26 сентября 2019

Вы можете обновить страновые валидаторы, выбрав его в качестве следующего кода:

onChangeCountry(country) {    
   if (country == "Canada") {
       this.form.controls.country.setValidators([Validators.required,Validators.maxLength(12)]);
   }else {    
       this.form.controls.country.setValidators([Validators.maxLength(12)]);


         } 
  this.form.controls.country.updateValueAndValidity();
}
...