我正在尝试做一个看起来很简单的过程:用动画显示从HTTP请求接收的项目列表。
首先,这是我的做法(我愿意接受任何以更好的角度进行的建议):
- 我定义了一个作用域变量
state
,我在控制器中将其初始化为loading
,当我从HTTP请求接收数据时,我将其更改为loaded
- 我用接收到的数据初始化作用域变量
items
- 在我看来,状态使用
ng-switch
,项目使用ng-repeat
- 我在
ng-repeat
上用css定义了一个动画
这是一个plunkr(用$timeout代替请求)。
我不明白为什么动画不起作用。
任何帮助都将不胜感激。谢谢
发生这种情况的原因是因为您的ng-when
。ng-if
也会发生同样的情况,但如果使用ng-show
,效果会很好。
问题是,当ng-when
条件返回true时,ng-when
首先在未匹配的dom中呈现其内容(因此不会发生动画)。然后,这个dom被附加到dom树(这一步是动画化的,但你必须把你的动画类放在ng上)。
当使用像ng-show
或ng-hide
这样的东西时,事情会按预期进行,因为dom总是附加的(只是显示/隐藏)。
这可能被认为是一个bug或ng动画的限制,你可能想发布一个github问题,看看棱角分明的家伙是否有任何想法。
angular的一个"特点"似乎是它不会添加.ng-enter
来重复ng-switch-when
块内的项目。你可以删除ng-switch-when="loaded"
,它会起作用(你真的不需要它,因为如果没有物品,ng-repeat
什么都不会做)
<div ng-switch="state">
<div ng-switch-when="loading">
<p>Please wait...</p>
</div>
<div >
<ul ng-repeat="item in items" class="animate-items">
<li>{{item}}</li>
</ul>
</div>
</div>
http://plnkr.co/edit/ocEj7BSQPSeIdnnfAOIE?p=preview