Изменение поведения обнаружения в Angular 9, связанное с анимацией - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть компонент 'image flipper', который исчезает между двумя изображениями с помощью анимации.

Он перестал корректно обновляться при обновлении до Angular 9.0.0 - интересно как с включенным, так и без Ivy.

Компонент является компонентом ChangeDetectionStrategy.OnPush, поэтому, конечно, я ожидал бы для определенных необнаружимых изменений необходимо вызвать ChangeDetectorRef.

Полный код не имеет значения, но функция обратного вызова выглядит примерно так:

flipperDone(event: AnimationEvent)
{
    // when image has faded out...
    if (event.toState == "void")
    {
        // look to see if a new image is pending
        if (this.nextImage) 
        { 
            // if so display it...
            // (it will fade in via animation trigger)
            this.currentImage = this.nextImage;
            this.nextImage = undefined;

            // was not previously needed before Angualar 9 - why?
            // this._cdr.detectChanges();
        }
    }
}

currentImage - это обычное свойство на который ссылается шаблон, поэтому, конечно, мне нужно позвонить ChangeDetectorRef.detectChanges() - и это исправит это.

Однако до Angular 9 это работало просто отлично, и я хочу понять, почему - чтобы быть уверенным, что я не совершу ту же ошибку в другом месте.

Документация гласит:

Компоненты обычно помечаются как грязные (нуждающиеся в повторной визуализации), когда входы изменились или произошли события выстрелил в поле зрения. Вызовите этот метод, чтобы убедиться, что компонент проверен, даже если эти триггеры не произошли.

Так что это подсказка, что, возможно, что-то не срабатывает, как раньше. Я не поднимаю никаких событий в компоненте (нет @Output).

Итак, изменились ли события анимации в Angular 9? Или ChangeDetection в целом? Или что-то еще?

...