Согласно вашему комментарию: я новичок в Angular, не могли бы вы объяснить мне, как это реализовать?
Я сделал простой пример, который использует c CSS анимация для выполнения своей работы.
Stackblitz: https://stackblitz.com/edit/angular-xedgma?file=src%2Fapp%2Fapp.component.css
Да, я понятия не имею, какие данные вы используете, я сделал простой список текста с пользовательским свойством, которое будет обрабатывать state
:
list = [
{
name: "test name 1",
active: false,
},
{
name: "test name 2",
active: false,
},
{
name: "test name 3",
active: false,
},
{
name: "test name 4",
active: false,
},
];
Итерация через html - это просто ngFor
с ngClass
для каждой строки:
<ng-container *ngFor="let data of list; let i = index">
<div class="single-item" [ngClass]="[data.active ? 'single-item-active':'single-item-not-active']" (click)="toggleActiveClass(i)">
{{data.name}}
</div>
</ng-container>
Я использовал ng-контейнер вместо div, потому что ng-контейнер не отображается в DOM.
Часть css:
.single-item {
height: 30px;
line-height: 30px;
background-color: grey;
margin-bottom: 10px;
box-sizing: border-box;
width: 200px;
transition: all 0.2s ease-in;
}
.single-item::after {
content: ' >>> click me';
cursor: pointer;
}
.single-item-not-active {
padding-left: 0px;
}
.single-item-active {
padding-left: 10px;
}
наконец, функция, изменяющая состояние, которой требуется индекс строки, повторяется:
public toggleActiveClass(index: number): void {
this.list[index].active = !this.list[index].active;
}
Имейте в виду одну вещь:
Вы не можете анимировать все свойства в css. Например, вы не можете анимировать изменение text-decoration
.