Как условно показать валидатор Rxweb Reactive для приложения Angular? - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю угловое приложение, которое использует среду валидации Rxweb.Это работает очень хорошо с большинством предопределенных проверок.Однако есть случаи, когда мне нужно искать дубликаты, которые находятся на сервере.

Я разместил ссылку на пример на stackblitz Validator.pattern не обновляется

В документации для RxWeb сказано, что вы можете поместить выражение validalExpression в валидатор, чтобы, если условие НЕ выполнено, валидатор не использовался.

Пример:

noneof: any[] = ["toast"];

ngOnInit() {
this.group = this.formBuilder.group({

  name: [this.course.name, [RxwebValidators.required({
    conditionalExpression: (x) => {
      var result = this.noneof.indexOf("toast") < 0;
      return result;
    },
  })]]
 });
}

Как видно на странице примера, обязательное отключено, поскольку условие не выполнено (т. Е. В массиве есть «toast»).

В следующем примере условия условие выполнено, и проверка включена, как и ожидалось.

noneof: any[] = ["toast"];

ngOnInit() {
this.group = this.formBuilder.group({
  title: [this.course.title, [RxwebValidators.required({
    conditionalExpression: (x) => {
      var result = this.noneof.indexOf("toast") > -1;
      return result;
    },
  })]],
});
}

Теперь, если вы поиграете в этом поле, вы скоро поймете, что, как только текст пуст, он показываетпроверочное сообщение, пока в нем не появится символ.

В третьем примере у меня есть шаблон регулярных выражений с условием.Условие не выполняется, потому что слово «toas» не соответствует требуемому «toast».Теперь, если я наберу 't' в конце, валидатор не станет активным, как ожидалось, даже если условие выполнено.

noneof: any[] = ["toast"];

ngOnInit() {
this.group = this.formBuilder.group({

  category: [this.course.category, [RxwebValidators.pattern(
    {
      expression: { 'duplicateTitle': /_NONONONO_/ },
      conditionalExpression: (x) => {
        var result = this.noneof.indexOf(x.category) > -1;
        return result;
      },
    })]],
  });
}

Регулярное выражение просто не должно отображать ошибку.Я использовал это, потому что я не нашел другого способа реализовать логику для проверки значения в списке.Список предназначен для хранения списка повторяющихся категорий, которые нельзя использовать.Если в любое время текст в текстовом поле соответствует элементу в списке.Условие должно быть выполнено, и шаблон должен потерпеть неудачу.Обратите внимание, что x.category является ссылкой на элемент, который обновляется.Несмотря на то, что условие выполнено должным образом, оно не показывает сообщение проверки.Само следующее изменение текста обновится и покажет сообщение проверки.

Вы можете поиграть , набрав 'toast', затем набрав 's', и появится сообщение проверки.

complete.component.ts

1 Ответ

0 голосов
/ 08 февраля 2019

Я хотел бы видеть кого-то, кто может прокомментировать эту проблему и дать мне лучшее решение, но легко вызвать обновление, вызвав updateValueAndValidity для ngModelChange.

<input type="text" formControlName="title" class="form-control" 
   (ngModelChange)="group.controls.title.updateValueAndValidity()" />

Вы можете посмотреть рабочий пример здесь , где изменение немедленно обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...