Как проверить ввод с помощью Angular Autocomplete

Мне нужна помощь.

Я использую Angular Material.

Моя проблема связана с отображением / отключением мат-ошибок при использовании автозаполнения.

В моем коде есть форма с функцией автозаполнения. Входные данные вызывают объект JSON в качестве ответа.

       { name: 'Paul', id: 1 }

На этом этапе необходимо показать [имя], когда он выбран в опции выбора, во входных данных. И установите значение параметра на [id].

Нет проблем, я закончил.

[displayWith] = "displayFn"

Ничего страшного, все работает как надо, но я не знаю, как проверить [id] как число. Каждый раз, когда я пробовал это, просто проверял ввод [имя] как строку.

Зачем мне это нужно? Итак, я буду использовать только [id] для создания объекта формы [ownerId].

         <input id="ownerId" type="text" matInput formControlName="ownerId" [matAutocomplete]="auto" placeholder="Digite para pesquisar..." name="doNotAutocomplete" autocomplete="doNotAutoComplete" required>
<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete" [displayWith]="displayFn">
  <mat-option *ngFor="let option of owners" [value]="option">
      {{option.name}}
  </mat-option>
</mat-autocomplete>
<mat-error>Selecione ou cadastre um novo proprietário.</mat-error>

             // Set display owner name on input form - id on value
    displayFn(owner: Owner): any {
        return owner && owner.name ? owner.name : '';
    }

                 // Horizontal Stepper form steps
        this.formGroup = this.formBuilder.group({
            formArray: this.formBuilder.array([
                this.formBuilder.group({
                    ownerId: ['', [Validators.required],
                    code: ['', Validators.required],
                    agent: ['', Validators.required]
                }),

Ошибка mat устанавливает вход НЕВЕРНЫЙ, когда имя выбирается из входа.

Большое спасибо за любую помощь.

1 ответ

Мое решение,

Здесь, в Stackru, я нашел подход к решению: Угловой материал: как проверить автозаполнение по предлагаемым параметрам?

То, что было нужно, просто, мне пришлось создать собственную функцию валидатора, такую ​​как:

function ownerIdValidator(): ValidatorFn {
  return (control: AbstractControl): { [key: string]: any } | null => {
    if (typeof control.value === 'string') {
      return { 'invalidAutocompleteObject': { value: control.value } };
    }

    return null;  /* valid option selected */
  };
}

И добавил сюда:

this.formGroup = this.formBuilder.group({
  formArray: this.formBuilder.array([
    this.formBuilder.group({
       ownerId: ['', [Validators.required, ownerIdValidator()]],

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

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