Angular 9 - 动画和 *ngIf 条件

Angular 9 - animations and *ngIf condition

我正在尝试理解 angular 中的动画,但目前我很难理解它。除了这个具体示例之外,任何学习资源都将受到赞赏。

这里是 stackblitz.

我的 目标 是在每次通过 *ngIf 条件创建和销毁组件时为组件设置动画。

当前问题:

我希望它看起来不会太复杂。我创建了 4 个示例,以便我可以弄清楚 使用 :enter + :leavevoid => * + * => void 和 [=38= 之间的区别是什么] 他们真正适用于谁:child 还是元素本身?

提出的问题已得到解答。

动画始终应用于它们绑定到的元素。

<div @comeOrGo>
    <hello *ngIf="show11" [name]="'Animation (1.1 on parent)'"></hello>
</div>

这最初起作用的原因是 div 是由 angular 创建并动画显示在视图中的。

然而,当您通过按钮切换它时,只会从 DOM 中删除 hello 组件,而不是 div(动画绑定到的组件)。

要修复我们可以这样做:

  <div @comeOrGo *ngIf="show11">
        <hello [name]="'Animation (1.1 on parent)'"></hello>
    </div>

这会从 DOM(以及 hello)中删除 div,从而触发动画。

至于快速切换按钮时的复制故障:

问题是,当 Angular 从 DOM 中删除一个元素并且该元素有一个动画时,它将始终播放这个动画,即使它之后再次创建该组件也是如此。

我不知道最好的解决方案,但如果允许用户快速单击切换按钮,则无论如何都不应该使用 :leave 动画。