我遇到了类似的问题,发现您需要采取稍微不同的方法。
在 Angular 中,动画与状态相关联。因此,与其在 HTML 中为动画定义不同的触发器,不如定义触发器可以在组件类中观察的多个状态。并且不是直接从方法触发动画,而是设置动画链接到的对象的状态。
因此,例如,我可以在导入必要的模块后在组件装饰器中定义以下内容。
@Component({
selector: 'app-some-animated',
templateUrl: './some.component.html',
styleUrls: ['./some-animated.component.scss'],
animations: [
trigger('flyInOut', [
transition("void => fly", [
animate(300, keyframes([
style({transform: 'translateX(100%)', opacity: 0}),
style({transform: 'translateX(0)', opacity: 1})
]))
]
)
]),
trigger('flyInOut', [
transition("void => fade", [
animate(300, keyframes([
style({opacity: 0}),
style({opacity: 1})
]))
]
)
])
]
})
在这种情况下,我会在元素实例化后立即制作动画。在 ngOnInit() 方法中,我将 this.watchMe 设置为“fly”或“fade”。
在 html 中,我像这样附加 flyInOut 触发器:
<div [@flyInOut]="watchMe">
Some content...
</div>
在您的情况下,您可能希望将所需的状态添加到您的字段对象或作为*ngFor 的可迭代条件。
coursetro 的这篇文章也有很好的解释和视频。