每当文本在我的Ionic 2(Angular 2)项目中发生变化时,我都会尝试为值设置动画 . 这是在Ionic2项目中,但对于任何Angular2都应该是相同的 .
我在标记中有以下内容..
<ion-list no-lines>
<ion-item *ngFor="let item of data>
<ion-card [@flyInOut]='cardState'>
<ion-card-content>
<div ><b>{{item.name.description}}</b></div>
<div [@valueUpdated]='item.lastname.description'>{{item.lastname.description}}</div>
<div>{{item.value}}</div>
</ion-card-content>
</ion-card>
</ion-item>
</ion-list>
以及组件中的以下触发器..
trigger('valueUpdated',[
state('void => *',style({
backgroundColor:'red'
})),
state('* => void',style({
backgroundColor:'green'
})),
transition('active => inactive', animate('100ms ease-in')),
transition('inactive => active', animate('100ms ease-out'))
])
我只是在这里使用颜色来测试,最终我希望它改变颜色(然后改回),或者可能有旧的值"flyout"和新的"flyin"(类似于Angular documentation.中的示例)
但是,在此之前,我只是想看看这是否可行 . 我是动画片的新手,所以也许我正好偏离轨道?
有可能这样做,如果是这样的话怎么样?
任何帮助非常感谢!
[UPDATE]
我已经接近以下内容,使用translateX fot测试而不是颜色变化(因为它更容易看到)...
trigger('valueUpdated', [
state('* => *', style({ transform: 'translateX(0)' })),
transition('* => *', [
animate(2000, style({ transform: 'translateX(100%)' }))
])
]),
当元素第一次添加时,我看到上面的动画translateX发生了,但是进入状态,即 item.name.description
被更改,div直接射向translateX(100%),然后返回到没有动画的translateX(0)到translateX( 100%),所以仍然不太正确 .
[UPDATE2]
我发现有些东西更接近..
trigger('valueUpdated', [
state('void => *', style({ transform: 'translateX(0)' })),
transition('void => *', []),
transition('* => *', [
animate(2000, style({ transform: 'translateX(100%)' }))
])
]),
添加 void => *
状态和转换会停止首次添加元素时发生的动画 . 现在只有当文本 first 从其初始值 but not any subsequent times 更改时才动画,因此仍然不正确 .