我"@angular/animations": "^4.3.0"
在我的项目中安装了 angular,我正在尝试运行 childAnimation()。
我有两个动画,一个用于父元素,一个用于子元素。都带有 :enter 和 :leave 转换。父元素的显示取决于*ngIf="isOpen"
。
:enter 对这两个元素都有效,但 :leave 在子元素上没有动画
为了做到这一点,我读到我必须使用query('@*', animateChild())
. 问题是这仍然不起作用。我在这里有什么遗漏吗?我的猜测是:leave 对孩子不起作用,因为只有父母是用 *ngIf 触发的,但是我怎样才能触发孩子的:leave 转换呢?
模板:
<div *ngIf="isOpen" [@fadeAnimation] (click)="close()">
<div [@slideHorizontalAnimation] (click)="$event.stopPropagation();">
...
</div>
</div>
动画:
export const fadeAnimation = trigger(
'fadeAnimation',
[
transition(
':enter',
[
style({ opacity: 0 }),
animate('100ms', style({ opacity: 1 }))
]
),
transition(
':leave',
[
style({ opacity: 1 }),
animate('100ms', style({ opacity: 0 })),
query('@*', animateChild())
]
)
]
);
export const slideHorizontalAnimation = trigger(
'slideHorizontalAnimation',
[
transition(
':enter',
[
style({ transform: 'translateX(-100%)', opacity: 0 }),
animate('100ms', style({ transform: 'translateX(0)', opacity: 1 }))
]
),
transition(
':leave',
[
style({ transform: 'translateX(0)', opacity: 1 }),
animate('100ms', style({ transform: 'translateX(-100%)', opacity: 0 }))
]
)
]
);