Работает как положено. У вас есть два разных состояния, которые переключаются при нажатии кнопки. В состоянии initial
непрозрачность равна 1, и данные отображаются. А в состоянии final
непрозрачность равна 0. Таким образом, данные не отображаются, пока вы снова не переключитесь в состояние initial
.
Чтобы достичь желаемого поведения, вы можете использовать только одно состояние и использовать переходы :enter
и :leave
для переключения между непрозрачностью. Это должно сделать следующее.
Компонент
import { Component } from '@angular/core';
import { trigger, state, style, animate, transition } from '@angular/animations';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ],
animations:[
trigger('fade', [
state('in', style({ opacity: 1 })),
transition(':enter', [ style({ opacity: 0 }), animate(600) ]),
transition(':leave', animate(600, style({ opacity: 0 })))
])
]
})
export class AppComponent {
array = [0, 10, 20, 30, 50]
goToPrevSet(){
this.array = this.array.map(data => data - 5)
}
goToNextSet(){
this.array = this.array.map(data => data + 5)
}
}
Шаблон
<div class="main-container" style="display:inline-flex">
<button style="padding:5px;font-size:17px;border: 1px solid #1eb2a6; background-color:#d4f8e8;border-radius:5px;cursor: pointer" (click)="goToPrevSet()">Prev</button>
<div *ngFor="let item of array">
<div style="padding:5px;" [@fade]="'in'">{{item}}</div>
</div>
<button style="padding:5px;font-size:17px;border: 1px solid #1eb2a6; background-color:#d4f8e8;border-radius:5px;cursor: pointer" (click)="goToNextSet()">Next</button>
</div>
Рабочий пример: Stackblitz