我正在开发的应用程序需要能够在路线中来回导航,因此当您以一种方式在应用程序中以一个方向导航时,组件会从左到右进行动画处理,而当您向后导航时,它们会从右到左导航。
IE
component1 -> component2 = left -> right animation
component2 -> component1 = right -> left animation
我可以在 NG4 中轻松实现这一点,但问题是它不能同时导航退出和进入组件。退出的组件消失了,进入的组件开始动画化。
我也可以在 NG2 中实现这一点——但是当你有条件动画时就会出现复杂情况。IE。
component2 -> component3 = left -> right animation
component2 -> component1 = right -> left animation
这里的问题是根据下一条或上一条路线触发不同的动画。
有没有人在 NG2 或 4 中有解决方案来解决在任一方向上同时为两个视图设置动画的问题?
我没有把它放在 plunkr 中,因为我不知道如何在其中设置 NG4 应用程序。道歉。
我的 NG4 解决方案基于此演示应用程序 https://github.com/matsko/ng4-animations-preview
但基本上在我的 app.component.ts 我有以下动画:
animations: [
trigger('routerAnimations',[
transition('page1 => page2',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page2 => page1', [
style({transform: 'translateX(-100%)'}),
animate('500ms')
]),
transition('page2 => page3',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page3 => page2',[
style({transform: 'translateX(-100%)'}),
animate('500ms')
]),
transition('page3 => page4',[
style({transform: 'translateX(100%)'}),
animate('500ms')
]),
transition('page4 => page3',[
style({transform: 'translateX(-100%)'}),
animate('500ms')
])
])
]
和一个函数,它从每条路由中获取一个动画值并将其绑定(?)到出口变量<router-outlet> in app.component.html
:
export class AppComponent {
prepareRouteTransition(outlet) {
let routeData: any;
try {
routeData = outlet['_activatedRoute'].snapshot.routeConfig['animation'];
} catch(e) {
return '';
}
return routeData.value;
}
}
上面的函数获取动画中用于定义过渡开始和结束值的动画值:
export const APP_ROUTES = [{
path: '',
component: Page1Component,
animation: {
value: 'page1',
}
},
{
path: 'page2',
component: Page2Component,
animation: {
value: 'page2',
}
},
{
path: 'page3',
component: Page3Component,
animation: {
value: 'page3'
}
},
{
path: 'page4',
component: Page4Component,
animation: {
value: 'page4'
}
}
];
app.component.html:
<div class="page" [@routerAnimations]="prepareRouteTransition(outlet)">
<router-outlet #outlet="outlet"></router-outlet>
</div>