Angular 2 Анимация - логический триггер - PullRequest
0 голосов
/ 28 мая 2020

У меня есть форма с одним полем, и если это поле неверно, я хочу встряхнуть его, используя анимацию

<form [formGroup]="subscribeFormGroup">
    <mat-form-field [@error]="isError" class="al-subscribe-form-field">
            <input formControlName="email" matInput type="email">
            <mat-icon class="al-subscribe-icon" svgIcon="mail" (click)="onSubscribeClick()"></mat-icon>
    </mat-form-field>
</form>


animations: [
    trigger('error', [
        transition('false <=> true', useAnimation(shake)),
    ]),
],

public onSubscribeClick(): void {
        if (this.subscribeFormGroup.invalid) {
            this.isError = true;
        }
    ...
}

Теперь он срабатывает только в первый раз, когда я пытаюсь отправить неправильные данные, если я нажимаю кнопка второй раз эт c, поле не трясется

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Другой способ - лучше, чем setTimeout- - использовать обратный вызов анимации done

<mat-form-field [@error]="isError" 
                (@error.done)="isError = false"
                class="al-subscribe-form-field">
...
</mat-form>
1 голос
/ 28 мая 2020

Вам необходимо установить isError на false после каждого цикла анимации. В противном случае переход false <=> true никогда не сработает, поскольку isError по-прежнему true. Попробуйте следующее

public onSubscribeClick(): void {
  if (this.subscribeFormGroup.invalid) {
    this.isError = true;
    setTimeout(() => { this.isError = false }, 1000);    // <-- set the duration to the animation duration
  }
  ...
}
...