Представьте себе следующий сценарий:

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

Пример:

Допустим, вы хотите узнать, какой пользователь щелкнул с помощью document get Element By Id, и вы не хотите использовать подход viewChild, и в этом случае я покажу вам способ присвоить идентификатор каждому из них в вашем html.

Давайте представим 2 сценария: один, как в примере выше, где у вас есть идентификатор каждого из них, и другой сценарий, в котором у вас нет идентификатора.

Сценарий 1 — с идентификатором:

Просто добавьте в html идентификатор на основе результата, полученного от вашего API.

/*API Result:*/
this.filters = [
      {
        id: 1,
        name: 'Land animals',
        options: [
          'Dog',
          'Cat',
          'Giraffe'
        ]
      },

      {
        id: 2,
        name: 'Aquatic animals',
        options: [
          'Crab',
          'Lobster',
          'Shark'
        ]
      },

      {
        id: 3,
        name: 'flying animals',
        options: [
          'eagle',
          'dragon-fly',
          'Bat'
        ]
      },
    ];

Добавьте идентификатор, полученный от API:

<div class="container" style="padding: 20px">
  <div class="row">
    <div *ngFor="let animals of filters; let index = index" class="col-sm">
      <select [id]="animals.id" class="form-select" (click)="getSelectById(animals.id)">
        <option selected disabled>{{ animals.name }}</option>
        <option *ngFor="let option of animals.options">
          {{ option }}
        </option>
      </select>
    </div>
  </div>
</div>

Используйте идентификатор результата API, чтобы создать идентификатор выбора.

[id]="animals.id"

Мы добавили метод щелчка, который передает идентификатор, назначенный выбору, в файл ts.

Метод клика:

(click)="getSelectById(animals.id)"
getSelectById(id: any) {
    let el = document.getElementById(id);
    console.log('selected: ', el);
  }

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

Сценарий 2 — Нет удостоверения личности.

Что делать, если у меня нет идентификатора, исходящего от API? А теперь, Simple, мы создадим динамический идентификатор, используя индекс цикла, я вам покажу.

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

API без идентификатора:

    this.filters = [
      {
        name: 'Land animals',
        options: [
          'Dog',
          'Cat',
          'Giraffe'
        ]
      },

      {
        name: 'Aquatic animals',
        options: [
          'Crab',
          'Lobster',
          'Shark'
        ]
      },

      {
        name: 'flying animals',
        options: [
          'eagle',
          'dragon-fly',
          'Bat'
        ]
      },
    ];
<div class="container" style="padding: 20px">
  <div class="row">
    <div *ngFor="let animals of filters; let index = index" class="col-sm">
      <select id="select{{ index }}" class="form-select" (click)="getSelectById(index)">
        <option selected disabled>{{ animals.name }}</option>
        <option *ngFor="let option of animals.options">
          {{ option }}
        </option>
      </select>
    </div>
  </div>
</div>

Используйте имя + индекс для создания пользовательского идентификатора:

id="select{{ index }}" 

В вашем методе просто соберите идентификатор и передайте его в документ.

  getSelectById(index: any) {
    let formattedId = `select${index}`;
    let el = document.getElementById(formattedId);
    console.log('selected: ', el);
  }

В HTML каждый выбор будет иметь свой собственный идентификатор.

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