【问题标题】:How to trigger an ng-move with angular-animate when reordering an array?重新排序数组时如何使用角度动画触发 ng-move?
【发布时间】:2014-10-01 01:53:17
【问题描述】:

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

  $scope.moveDown = function(order){
    var temp = $scope.names[order];
    $scope.names.splice(order, 1);
    $scope.names.splice(order+1, 0, temp);
  }

这是一个显示我在做什么的 plunker:http://plnkr.co/edit/SuahT6XXkmRJJnIfeIO1?p=preview

单击任何名称以使其在列表中向下移动。

有没有办法在不拼接的情况下重新排序数组?还是在 item 的 $index 发生变化时手动触发移动动画?

【问题讨论】:

    标签: angularjs ng-animate


    【解决方案1】:

    尝试在移除和插入之间留出一个间隙(消化中),这将使ng-enterng-leave 动画启动。

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

    Plnkr

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

    视图模型:-

      $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),似乎只有在删除项目并插入新项目时(基于 tracker 属性) angular 将动画类添加到它。你不能像原来那样使用原始的。

    Plnkr2

    【讨论】:

    • 谢谢!再加上一点混搭,使动画看起来像是在向下移动:Plunker
    • @tim 这正是我之前尝试过的,然后又反对它...... :)
    • 你最后做了什么作为替代方案?使用 $timeout 对我来说总是感觉很麻烦
    • 使用$timeout 总是一个hack,它只是用来延迟添加操作直到下一个摘要周期以使动画发生.. :D 但是如果你一起做同样的摘要周期将执行删除并在数组中添加相同的项目并且没有添加任何类。有时间我会尝试一些东西..
    • @tim 你看更新了吗?你满意吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2019-08-14
    • 1970-01-01
    • 2019-11-16
    • 2019-07-04
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多