Предотвращение дублирования выбора в списке мат-чипов Multiselect: подробное руководство

В этой статье блога мы рассмотрим различные методы предотвращения дублирования выбора в компоненте Mat Chip List Multiselect в Angular с использованием платформы Material Design. Мы предоставим примеры кода и обсудим лучшие практики для реализации этой функциональности.

Метод 1: использование набора или массива для отслеживания выбранных элементов
Один из самых простых подходов — использовать набор или массив для отслеживания выбранных элементов. Когда выбран новый элемент, мы можем проверить, существует ли он уже в наборе или массиве. Если это так, мы можем предотвратить выбор. Вот пример:

selectedItems: Set<string> = new Set<string>();
onItemSelected(item: string): void {
  if (!this.selectedItems.has(item)) {
    this.selectedItems.add(item);
    // Perform additional logic here
  }
}

Метод 2: отключение уже выбранных параметров
Другой эффективный метод — отключить уже выбранные параметры. Это не позволяет пользователям выбирать их снова. Вот пример:

<mat-chip-list>
  <mat-chip *ngFor="let item of items" [disabled]="selectedItems.has(item)">
    {{ item }}
  </mat-chip>
</mat-chip-list>

Метод 3: фильтрация повторяющихся выборок
Мы также можем отфильтровать повторяющиеся выборки из списка выбранных элементов. Это гарантирует, что будут отображаться только уникальные элементы. Вот пример:

selectedItems: string[] = [];
onItemSelected(item: string): void {
  if (!this.selectedItems.includes(item)) {
    this.selectedItems.push(item);
    // Perform additional logic here
  }
}

Метод 4: использование реактивных форм и валидаторов
Если вы работаете с реактивными формами, вы можете использовать встроенные валидаторы для предотвращения дублирования выбора. Вот пример:

import { Validators } from '@angular/forms';
this.formGroup = this.formBuilder.group({
  selectedItems: ['', [Validators.required, this.validateDuplicateSelection]]
});
validateDuplicateSelection(control: AbstractControl): ValidationErrors | null {
  const selectedItems: string[] = control.value;
  const uniqueItems = new Set(selectedItems);

  if (selectedItems.length !== uniqueItems.size) {
    return { duplicateSelection: true };
  }

  return null;
}

Предотвращение дублирования выбора в списке Mat Chip List Multiselect имеет решающее значение для бесперебойной работы пользователя. В этой статье мы рассмотрели несколько методов достижения этой функциональности, в том числе использование набора или массива для отслеживания выбранных элементов, отключение уже выбранных параметров, фильтрацию дубликатов выбора и использование реактивных форм и валидаторов. Реализуя эти подходы, вы можете обеспечить целостность вашего компонента с множественным выбором.