尝试在移除和插入之间留出一个间隙(在消化中),这将得到ng-enter
and ng-leave
启动动画。
var temp = $scope.names.splice(order, 1).pop();
$timeout(function(){
$scope.names.splice(order+1, 0, temp);
});
Plnkr http://plnkr.co/edit/UJBGTcN4GO9liFyMQs2d?p=preview
如果您想避免使用超时,请稍微重组您的数据,使其成为对象数组(无论如何这总是可取的)并执行以下操作:-
视图模型:-
$scope.names = [{'name':'Igor Minar'}, {'name':'Brad Green'}, {'name':'Dave Geddes'}, {'name':'Naomi Black'}, {'name':'Greg Weber'}, {'name':'Dean Sofer'}, {'name':'Wes Alvaro'}, {'name':'John Scott'}, {'name':'Daniel Nadasi'}];
在处理程序中:-
$scope.moveDown = function(order){
var itm = $scope.names.splice(order+1, 1).pop(); //Get the item to be removed
$scope.names.splice(order, 0, angular.copy(itm)); //use angular.clone to get the copy of item with hashkey
}
这里有两件事很重要,您需要使用 angular.clone 以便默认跟踪器属性($$hashkey
)将从移动项目中删除,似乎只有当该项目被删除并插入新项目(基于跟踪器属性)时,角度才会向其添加动画类。你不能像原来那样使用原始类型来做到这一点。
Plnkr2 http://plnkr.co/edit/zlspBR?p=preview