Я создаю угловое приложение, которое использует среду валидации 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