Я впервые использую NGXS store для управления состоянием приложения. Все идет довольно хорошо, но я столкнулся с проблемой, которую мне не удалось преодолеть, и это касается переходов / анимаций. У меня есть список предметов, и эти предметы могут быть в выбранном состоянии, что позволяет им расширяться и отображать дополнительную информацию. Перед тем, как подключить эту функцию к хранилищу (она работала непосредственно с компонентом), я использовал стандартные CSS-переходы на max-heigth
для анимации расширения, но как только я подключил эту функцию к хранилищу (начал отправлять действия),переходы перестали работать. Я вижу, что каждый раз, когда магазин обновляется, элементы dom удаляются и читаются в dom, и это делает использование стандартного CSS неосуществимым. Поэтому я перешел и попытался использовать угловые анимации с триггером, которые используют разные состояния для выполнения переходов, но у меня получилось только расширение, а не сокращение, и если у меня есть выбранный элемент (расширенный), а затем добавить другой, выбранный элемент повторяетсяанимация и это не желательно. Вот соответствующий код:
animations: [
trigger('xis', [
state(
'expanded',
style({
maxHeight: '100px',
}),
),
state(
'closed',
style({
backgroundColor: 'green',
maxHeight: '0',
}),
),
transition('* => expanded', [animate('300ms')]), // This represent what I already tried
transition('* => closed', [animate('300ms')]), // And not that I use all of these
transition('* => *', [animate('300ms')]),
transition(':enter', [animate('300ms')]),
transition(':leave', [animate('300ms')]),
]),
],
})
<div
items
class="item"
[ngClass]="{ selected: isSelected(hp) | async }"
*ngFor="let hp of reportItem$ | async"
(click)="selectItem(hp.getId())"
>
<div class="item-header">...</div>
<div
class="complementary-info"
[@xis]="(isSelected(hp) | async) ? 'expanded' : 'closed'"
>
...
</div>
</div>
Интересно, сталкивался ли кто-нибудь с этой проблемой и нашел ли способ ее решить или кто-то может указать мне на то, что я делаю неправильно