Итак, у меня есть список задач, каждая из которых имеет пульсацию, и когда вы нажимаете задачу, я хочу перенаправить страницу на новый URL-адрес, но я хочу, чтобы анимация пульсации завершилась до этого.
В Angular 4+ я не могу найти способ сделать это легко, единственное решение, которое я пока придумал, это следующее: есть ли «правильный» способ сделать это в Angular?
Компонент:
export class TodoListComponent {
public todos = this.todoService.todos$;
@ViewChildren(MatRipple) private ripples: QueryList<MatRipple>;
constructor(private todoService: TodoService, private router: Router) {}
public onGoTo(event: MouseEvent, index: number, todo: Todo): void {
const enterDuration = 300;
const exitDuration = 50;
const rippleRef = this.ripples
.toArray()
[index].launch(event.clientX, event.clientY, {
animation: {
enterDuration,
exitDuration,
},
});
setTimeout(() => rippleRef.fadeOut, enterDuration);
const animationDuration = enterDuration + exitDuration;
setTimeout(() => this.router.navigate([todo.id]), animationDuration);
}
}
Шаблон:
<mat-list>
<mat-list-item
*ngFor="let todo of (todos | async); let index = index"
mat-ripple
[matRippleDisabled]="true"
>
<div class="Todo">
<div class="Todo__Label" (click)="onGoTo($event, index, todo)">
{{ todo.title }}
</div>
</div>
</mat-list-item>
</mat-list>