Angular 7: измените этот пользовательский валидатор так, чтобы он правильно проверял значения больше 1 - PullRequest
0 голосов
/ 25 октября 2019

В моем приложении Angular 7 я создал пользовательский валидатор, который должен проверять, больше или равно значение, введенное в элемент управления формы, 2. 2. 1001 *

Мой пользовательский валидатор:

static greaterThanOne(control: AbstractControl) {
  const v = control.value;
  if ( v >= 2) {
    return null;
  } else {
    return { greaterThanOne: true };
  }
}

Мой HTML

    <div class="col-lg-2">
      <label class="sr-only" for="dependency-section-2-3"> How many people are in the
        household?</label>
      <input
        required
        maxlength=2
        numericOnly
        formControlName="studentHouseHold"
        name="studentHouseHold"
        id="studentHouseHold"
        class="form-check-input"
        data-hint="yes"
        type="text"
        class="form-control col-4"
        data-hint="yes"
        value=""
      >
      <div *ngIf="sectionTwo.studentHouseHold.errors && sectionTwo.studentHouseHold.touched"
        class="alert text-danger m-0 p-0 col-md-12">
        <div
          *ngIf="sectionTwo.studentHouseHold.touched && sectionTwo.studentHouseHold.invalid && sectionTwo.studentHouseHold.errors.greaterThanOne && sectionTwo.studentHouseHold.errors.earningsFormat && !sectionTwo.studentHouseHold.errors.required"
          class="alert text-danger m-0 p-0 col-md-12">
          Invalid entry.
        </div>
        <div *ngIf="sectionTwo.studentHouseHold.errors.required">This field is required.</div>
      </div>
    </div>

Некоторые вещи, на которые следует обратить внимание ... Я не могу изменить тип ввода с «текст» на «номер». Чтобы справиться с этим, я создал пользовательскую директиву «numericOnly», которая позволяет пользователю вводить только цифры. Мне просто нужно изменить пользовательский валидатор так, чтобы любое значение, которое вводит пользователь, должно быть больше или равно 2.

Я также пытался добавить валидатор угловых значений, Validator.min (2), к своему элементу управления формой. , но это не сработало.

1 Ответ

0 голосов
/ 25 октября 2019

После некоторого тестирования это был правильный способ написания валидатора:

static greaterThanOne(control: AbstractControl): { [key: string]: boolean } {
  const isValidNum = (/^([2-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9])$/).test(control.value);
  return isValidNum ? null : { greaterThanOne: true };
}

Надеюсь, это поможет, если кто-нибудь обнаружил аналогичную проблему.

...