ng-animate:有条件地切换“后退”过渡(BUG?)

时间:2013-07-27 10:48:53

标签: css3 angularjs ng-animate

大家好,

阅读this google group以及从那里链接的小提琴和博客帖子,我设法让页面过渡与ng-animate一起使用。

这里的 my Fiddle

the fiddle is nicely commented, please let me know if anything's unclear

通过在ng-view上设置'transitionClass'(.LR或.RL),我能够为每次视图更改触发不同的css-transitions。

现在,我想要做的是,在将视图向后退一步的情况下,手动应用“后退”转换,无论退回是由应用程序中的链接还是浏览器的后退按钮引起的。 / p>

为此,在app.run()中,我正在监听$ locationChangeStart,保存当前的url slug,然后在下一个$ locationChangeStart上检查它,以确定我们是否要返回一页。如果是这种情况,则应用“后退”转换。

除了...

之外,效果非常好

输入页面(.page-enter,.page-enter-active)正在按预期转换,而离开页面(.page-leave,.page-leave-active)似乎停留在之前使用的转换上

我希望,在ng-view上设置transitionClass'LR',进入和离开的两个页面都使用css转换为'.LR page-enter'和'LR page-leave'。

似乎发生了什么:如果之前的transitionClass为'ANY',则ng-animate将使用'.LR page-enter'作为输入页面,'.ANY page-leave'作为离开页面。

重现'bug':

应用程序从第1页开始。从1到2.现在从2到3,此转换已中断。从3到1,这个过渡按预期工作。 两个转换都是'RL'(从右到左),所以它们应该看起来一样。唯一的区别是第2页进入'LR'而第3页进入'RL'。因此,实际上,第1页将使用最初为第3页设置的“.enter-active”转换,从2更改为3。

这是预期的行为吗?

我现在主要被困扰,但是在过去一周左右只使用角度和ng-animate是一个相对较新的功能我可能很遗憾。因此,在报告错误或任何内容之前,我欢迎您提出任何意见。

谢谢!

1 个答案:

答案 0 :(得分:2)

好的,基于这些评论,我非常确定您希望传入页面还确定要应用于传出页面的退出动画。所以你真的需要你的$ locationChange代码。

您看到的问题似乎是您在传入页面上独立地在父级上设置了一个类,但没有任何东西可以让动画等待此类更改发生。

最简单的修复似乎是让ng-animate依赖于你的变化变量来确定动画类名:

<ng-view ng-animate="transitionClass"></ng-view>

然后CSS选择器就会崩溃成单个类:

.LR-enter-active {
  ...
}

(其中transitionClass仍在locationChangeStart的$ rootScope上设置:)

 $rootScope.$on("$locationChangeStart", function (event, next, current) {
 ...

http://jsfiddle.net/9XPVX/4/