Angular Валидаторы на элементах объекта в реактивной форме - PullRequest
0 голосов
/ 18 марта 2020

У нас есть Angular Reactive Formbuilder

this.formBuilderGroup({
  'productType':['',[Validators.required, Validators.min(3)]],
  'deliveryCategory':['',[Validators.required, Validators.max(8)]]
})

Они на самом деле управляются из выпадающих меню выбора материалов и дают объекты Dto. Как мне использовать валидаторы для реальных членов Object в пределах?

, таких как productType.productTypeId Validator min: 1.

и deliveryCategory.deliveryCategoryNo min 1?

Validators.min is в настоящее время только для всего объекта.

Как я могу написать собственный Validator, который будет принимать объект как член объекта в качестве параметров? Или есть более оптимальный способ?

1 Ответ

1 голос
/ 18 марта 2020

Для этого требуется специальный валидатор, который можно записать так:

// pass in property to validate and list of validators to run on it
export function validateProperty(property: string, validators: ValidatorFn): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    // get the value and assign it to a new form control
    const propertyVal = control.value && control.value[property];
    const newFc = new FormControl(propertyVal);
    // run the validators on the new control and keep the ones that fail
    const failedValidators = validators.map(v =>  v(newFc)).filter(v => !!v)
    // if any fail, return the list of failures, else valid
    return failedValidators.length ? {'invalidProperty': failedValidators} : null;
  };
}

использование:

'productType':['', validateProperty('propertyToValidate', [Validators.required, Validators.min(3)])],
...