Анимации всегда применяются к элементу, с которым они связаны.
<div @comeOrGo>
<hello *ngIf="show11" [name]="'Animation (1.1 on parent)'"></hello>
</div>
Причина, по которой это работает изначально, заключается в том, что div создается и анимируется в виде angular.
Однако, когда вы переключаете его с помощью кнопки, из DOM удаляется только компонент hello
, а не div (с которым связана анимация).
Чтобы исправить, мы можем сделать this:
<div @comeOrGo *ngIf="show11">
<hello [name]="'Animation (1.1 on parent)'"></hello>
</div>
Это удаляет div
из DOM (а также hello
) и, следовательно, запускает анимацию.
Что касается сбоя дублирования при быстром переключении кнопок:
Проблема в том, что когда Angular удаляет элемент из DOM и этот элемент имеет анимацию, он всегда будет воспроизводить эту анимацию, даже если впоследствии он снова создаст компонент.
Я не знаю лучшего решения для него, но если пользователю разрешено быстро нажимать кнопку переключения, вам все равно не следует использовать :leave
анимацию.