我遇到过类似的问题,发现需要采用稍微不同的方法。
在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的这篇文章有一个很好的解释和视频。