当我更新我收集到*ngFor
的集合时触发动画:
//JS
state : string = 'a';
colors = {
a: ['red','blue','green','yellow'],
b: ['orange']
}
public onClick (){
this.state = this.state === 'a' ? 'b' : 'a';
}
//HTML
<div *ngFor="let color of colors[state]"
[@animationState]="state"
(click)="onClick()">
{{color}}
</div>
问题:动画发生时,a
和b
的颜色都会显示,这会让动画变得生涩。
我尝试过:
transform: scale(0)
动画开始之前设置display:none
或void => *
void => *
动画* => void
动画
我希望能够在新内容淡出/滑入之前(或同时)平滑淡出和/或滑出现有内容。
这是一个证明问题的傻瓜:https://plnkr.co/edit/IDE6q6lJ84QI2Zirvn4P?p=preview
答案 0 :(得分:0)
我设法使它工作,但感觉就像一个黑客。我没有立即将ngFor
集合设置为新值,而是
ngFor
集合设置为空集合这会触发两个动画而不是一个动画,但似乎效果不错。
//JS
state : string = 'a';
temp : string;
colors = {
a: ['red','blue','green','yellow'],
b: ['orange'],
empty: []
}
public onClick (){
this.temp = this.state === 'a' ? 'b' : 'a';
this.state = 'empty'
}
public animationComplete(){
if(this.temp){
this.state = this.temp;
this.temp = undefined;
}
}
//HTML
<div *ngFor="let color of colors[state]"
[@animationState]="state"
(@animationState.done)="animationComplete()"
(click)="onClick()">
{{color}}
</div>