Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 重新排列阵列时,如何使用角度动画触发ng移动?_Angularjs_Ng Animate - Fatal编程技术网

Angularjs 重新排列阵列时,如何使用角度动画触发ng移动?

Angularjs 重新排列阵列时,如何使用角度动画触发ng移动?,angularjs,ng-animate,Angularjs,Ng Animate,使用角度1.2.4 我试图弄清楚当重复的项目被重新排序时,如何触发ng animate的移动。我知道ng动画正在工作,因为当应用过滤器时,enter、leave和move的动画都会被触发。但是,当我使用一些数组方法对数组重新排序时,不会触发任何动画。 我怀疑问题的一部分在于,我实际上是使用此方法将元素移除并添加到数组中,而不是真正“移动”它们: $scope.moveDown = function(order){ var temp = $scope.names[order];

使用角度1.2.4 我试图弄清楚当重复的项目被重新排序时,如何触发ng animate的移动。我知道ng动画正在工作,因为当应用过滤器时,enter、leave和move的动画都会被触发。但是,当我使用一些数组方法对数组重新排序时,不会触发任何动画。 我怀疑问题的一部分在于,我实际上是使用此方法将元素移除并添加到数组中,而不是真正“移动”它们:

  $scope.moveDown = function(order){
    var temp = $scope.names[order];
    $scope.names.splice(order, 1);
    $scope.names.splice(order+1, 0, temp);
  }
下面是一个plunker,它显示了我在做什么:

单击任意名称,使其在列表中向下移动

有没有办法在不拼接的情况下对阵列重新排序?或者在项目的$index发生变化时手动触发移动动画?

尝试在移除和插入之间留出一个间隙(在消化过程中),这将使
ng enter
ng leave
动画生效

    var temp = $scope.names.splice(order, 1).pop();
    $timeout(function(){
       $scope.names.splice(order+1, 0, temp);
    });

如果要避免使用超时,请稍微重新构造数据,使其成为对象数组(无论如何,这总是可取的),然后执行以下操作:-

视图模型:-

  $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
),这似乎只有在删除项目并插入新项目时(基于跟踪器属性)angular才会向其添加动画类。您不能像最初那样使用primitive


谢谢!通过一点捣乱使动画看起来像是在向下移动:@tim这也正是我以前尝试过的,然后我就反对它了……)你最后做了什么作为替代?使用$timeout对我来说总是有点不方便使用
$timeout
总是一种不方便的方法,它只是用来将添加操作延迟到下一个摘要周期,以便动画发生但是,如果您一起执行,那么相同的摘要周期将执行数组中相同项的删除和添加,并且不会添加任何类。我会在有时间的时候尝试一下。@tim你看过更新了吗?你对此满意吗?