Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
06 Сен 2023
2 мин
206

Angular: Условный класс с использованием *ngClass

Пройдите тест, узнайте какой профессии подходите

Одна из общих проблем, с которой могут столкнуться начинающие разработчики при использовании Angular, связана с использованием *ngClass для применения условных

Одна из общих проблем, с которой могут столкнуться начинающие разработчики при использовании Angular, связана с использованием *ngClass для применения условных классов к элементам. Вот типичный пример того, как может выглядеть код:

<ul>
  <li *ngClass="{active: currentItem==='item1'}" (click)="currentItem='item1'">Item1</li>
  <li *ngClass="{active: currentItem==='item2'}" (click)="currentItem='item2'">Item2</li>
  <li *ngClass="{active: currentItem==='item3'}" (click)="currentItem='item3'">Item3</li>
</ul>

Здесь мы пытаемся применить класс active к элементам списка в зависимости от текущего выбранного элемента. Однако, при выполнении этого кода мы столкнёмся с ошибкой: «Cannot read property ‘remove’ of undefined at BrowserDomAdapter.removeClass».

Эта ошибка происходит потому, что Angular пытается удалить класс с элемента, который ещё не был инициализирован. В результате, метод removeClass вызывается на undefined, что приводит к данной ошибке.

Чтобы избежать этой ошибки, необходимо убедиться, что элемент, с которым мы работаем, был инициализирован. Для этого можно использовать директиву *ngIf для проверки условий перед применением класса. Вот как это можно сделать:

<ul>
  <li *ngIf="currentItem" *ngClass="{active: currentItem==='item1'}" (click)="currentItem='item1'">Item1</li>
  <li *ngIf="currentItem" *ngClass="{active: currentItem==='item2'}" (click)="currentItem='item2'">Item2</li>
  <li *ngIf="currentItem" *ngClass="{active: currentItem==='item3'}" (click)="currentItem='item3'">Item3</li>
</ul>

Теперь, прежде чем применять класс к элементу, Angular проверит, был ли инициализирован currentItem. Это предотвратит ошибку и позволит корректно применять классы к элементам.

Добавить комментарий