Как добавить шаблоны регулярных выражений для ввода на основе выбора раскрывающихся списков в угловом материале

Я использую угловой материал, и на основе выбора раскрывающегося списка должно быть изменение шаблонов в поле ввода. я сделал таким образом, но я не могу получить сообщение об ошибке в HTML, а также мне нужно сократить строки кода, вместо того, чтобы писать условие if else, как его можно вызвать динамически.

ТС:

onDropDownChange(event: any) {
    if (event == 1) {
        this.form.get('inputValue').reset();
        this.form
            .get('inputValue')
            .setValidators(Validators.pattern('[0-9]{12}'));
    } else if (event == 2) {
        this.form.get('inputValue').reset();
        this.form
            .get('inputValue')
            .setValidators(Validators.pattern('[A-Z]{2}d{7}'));
    } else if (event == 3) {
        this.form.get('inputValue').reset();
        this.form
            .get('inputValue')
            .setValidators(Validators.pattern('d{6}[A-Z]{3}'));
    }
}

HTML:

<mat-form-field style = "width:80%;" class = "select-input-field">
    <mat-select [(value)] = "selected" placeholder = "Inspection Type" (selectionChange) = "onDropDownChange($event)">
        <mat-option [value] = "">None</mat-option>
        <mat-option *ngFor = "let inspectionType of inspectionTypes" [value] = "inspectionType.inspection_type_id">{{inspectionType.description}}</mat-option>
    </mat-select>
</mat-form-field>

<form [formGroup] = "form">
    <input type = "text" formControlName = "inputValue" placeHolder = "predicatePlaceHolder" >
    {{form.get('inputValue').hasError('pattern')}}
    <mat-error class = "alert-danger" *ngIf = "form.get('inputValue').hasError('pattern')" >
    Invalid User</mat-error>
</form>

Демо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Представьте массив, содержащий все ваши строки шаблонов, упорядоченные, как вы уже делали, что-то вроде:

validators = [ first_pattern_string,second_pattern_string, third_pattern_string];

Затем измените обработчик событий на что-то вроде:

onDropDownChange(event: number, inputValue = this.form.get('inputValue')) {
   inputValue.reset();
   inputValue.clearValidators();
   inputValue.setValidators(Validators.pattern(this.validators[event-1]));
   inputValue.updateValueAndValidity();
}

Обновлено:

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

Кроме того, вам нужно создать настоящий RegExp, а не просто строки.

Вот рабочий пример: https://stackblitz.com/edit/angular-material-dropdown-jlhc1h

Итак: замените regExp, который я поставил, и все готово.

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

Misha Mashina 09.04.2023 10:13

спасибо за ответ, что если у меня есть строка вместо числа

Bhrungarajni 09.04.2023 13:11

я добавил демо, пожалуйста, проверьте и исправьте меня

Bhrungarajni 09.04.2023 13:21

Будет ли работать, если поставить [+event-1] вместо [event-1]?

Misha Mashina 09.04.2023 13:22

я проверю, но для шаблона он не показывает ошибку

Bhrungarajni 09.04.2023 13:22

любая помощь, которую я также создал демо

Bhrungarajni 09.04.2023 15:55

Проверьте отредактированный ответ.

Misha Mashina 09.04.2023 17:10

спасибо за ответ @Misha, меня беспокоит то, что у меня не только 3 объекта в массиве, у меня есть 10 объектов среди этих 10 объектов, эти объекты могут иметь любой индекс в нем, поэтому, соответственно, его нужно проверить

Bhrungarajni 10.04.2023 06:51

привет Миша, одна помощь, здесь на основе выбора раскрывающегося списка я устанавливаю шаблон, но теперь, как я могу сделать ввод, чтобы принимать только числа, а не альфа, несколько раскрывающихся списков могут иметь дефис, а один раскрывающийся список имеет 2 альфа-символа, поэтому в этом ситуация, как с этим можно справиться?

Bhrungarajni 19.04.2023 09:20

Вы имеете в виду запрет пользователю вводить ограниченные символы или разрешение ему вводить, но рассматривать это как недопустимый ввод?

Misha Mashina 19.04.2023 11:53

например, у меня есть только 7-значные числа, поэтому это должно разрешать только числа без алфавитов и специальных символов в самом вводе пользователя, который должен быть ограничен

Bhrungarajni 19.04.2023 12:02

Другие вопросы по теме