У меня есть компонент '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 в целом? Или что-то еще?