重新排序数组时如何用 Angular-Animate 触发 ng-move?

2024-03-08

使用角度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);
  }

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

单击任意名称可将其在列表中向下移动。

有没有一种方法可以在不拼接的情况下重新排列数组?或者当项目的 $index 发生变化时手动触发移动动画?


尝试在移除和插入之间留出一个间隙(在消化中),这将得到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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新排序数组时如何用 Angular-Animate 触发 ng-move? 的相关文章

随机推荐

  • 如何降级或安装特定版本的 Composer?

    我在正在设置的项目中收到以下错误 您正在使用 Composer 2 您的某些插件似乎与它不兼容 确保更新您的插件或报告插件问题以要求他们支持 Composer 2 本周我开始在一家新公司工作 只是想安装他们的项目 但似乎没有办法更改我在 W
  • 如何使用 selenium 验证 target="_blank" 链接?

    我们页面上的某些链接使用 target blank 在新窗口中打开 如何让 selenium 查看正确的窗口 以便我可以验证该页面是否链接到正确的页面 这是我一直在尝试的 open page click link Find us on Fa
  • 防止 Android Fragment 在设备旋转上重新创建

    问题 当我旋转设备时 应用程序中片段中包含的信息将被重新加载 由于该应用程序从互联网上获取信息 这意味着在重新收集数据时一段时间内会缺乏数据 我尝试过的 我读过很多文章和 S O 问题 它们给出了一些一般性的指导 并尝试了他们的解决方案 来
  • 动态链接域不可用

    根据文档 我的项目应该有一个动态链接域 它显示在动态链接页面的顶部 该文档有一个屏幕截图 如下所示 根据 Firebase 文档的域位置 https i stack imgur com 7P2Xd png 然而 在我的项目的动态链接页面上没
  • Java 程序无法运行并抛出有关类的错误

    所以我想运行我刚刚编译的 Start class 文件 它是我从 Start java 编译的 问题是它会抛出这个错误 java Start Exception in thread main java lang NoClassDefFoun
  • 在同步方法中使用 Task.Run() 以避免异步方法等待死锁?

    UPDATE这个问题的目的是为了得到一个简单的答案Task Run 和僵局 我非常理解不混合异步和同步的理论推理 并且我将它们牢记在心 我并不排斥从别人那里学习新东西 只要有可能 我都会尽力做到这一点 有时 一个人需要的只是技术答案 我有一
  • CFLAGS、CCFLAGS、CXXFLAGS - 这些变量到底控制什么?

    我正在使用 GNU make 编译我的 C 代码 我想了解如何使我的编译可定制 我在不同的地方读到CFLAGS CCFLAGS and CXXFLAGS用于此目的 那么我应该如何使用它们呢 如果我有额外的命令行参数给编译器 我应该将它们附加
  • 将结构写入 csv 文件

    将结构转储到提供的 csv 文件中的惯用 golang 方法是什么 我位于一个 func 中 其中我的结构作为 interface 传递 func decode and csv my response http Response my st
  • RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl

    由于某种原因 RoboBlender 不会生成注释数据库 我的 build gradle 具有以下依赖项 dependencies provided org roboguice roboblender 3 0 compile fileTre
  • 有没有一种简单的方法可以清除C中的管道

    我有一个所有子进程都使用的管道 但在子进程使用该管道与父进程通信之前 我需要清除它 以便父进程正确读取它 C 中有一个简单的函数可以做到这一点吗 清除 管道的方法是从管道中读取数据 直到缓冲区为空 这对你没有帮助 我猜测您真正的问题是父级可
  • 如何用一个值函数设置多个属性?

    给定包含多个数据元素的数据 例如对象或数组 是否可以使用单个值函数在选择上设置多个属性 例如 就像是 var data x 10 y 20 r 5 d3 select body append svg selectAll circle dat
  • 当单击网格上的任何其他单元格时,Ag Grid 会停止编辑单元格。如何防止这种情况发生?

    我有一个 Ag 网格fullRow编辑功能 当出现以下情况时 该行进入编辑模式 Edit单击按钮 使用startEditing 网格法 在编辑模式下 我显示两个按钮 Save and Cancel 我找到了抑制键盘事件 Enter Esc
  • 如何为 Windows 创建一个强大的、最小的安装程序? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一个具有一些特定属性的安装程序 EXE 它应该是一个单一的exe文件 它应该是健壮的 即该技术应该可以在任何 Windows
  • Qmake 不使用 stdc++11 编译标志

    当我尝试编译我的项目时 出现以下错误 g c pipe std c 11 O2 g pipe Wall Werror format security Wp D FORTIFY SOURCE 2 fstack protector strong
  • 有没有有效的方法使用Android Studio模拟器测试华为应用商店的应用程序?

    我想知道是否有任何有效的方法可以使用Android Studio模拟器测试华为商店的应用程序 我尝试禁用 Google Play 服务 但由于某种原因 Retrofit 请求停止工作 您可以使用云端调试AppGallery Connect
  • 如何设置Hubot基本权限?

    如何设置基本用户权限 以便用户无法运行 Hubot die 或 Hubot show storage 等命令 我可以看到有一个名为 hubot auth 的脚本 但这似乎是为了在其他脚本中实现它 而不是控制现有命令 有一个小章节关于它使用
  • 如何在画布上制作自定义可编辑文本框,背景随文本一起传播?

    我没有在flutter中使用过canvas 但我认为像图像中的编辑文本框可以通过canvas来实现 背景随着文本长度而扩展 如果一行中的文本长度为 0 则没有背景 如果您有任何代码或建议可以这样做 请提供帮助 这里是代码 class Tex
  • 由 Peer pymongo 重置连接

    我有一些文档 我必须从 mongodb 获取并将其设置到 memcache 这是代码 import memcache from pymongo import MongoClient db mongo client job db JobPar
  • 如何在训练自动编码器(回调)期间将keras中的输入随机设置为零?

    我正在联合训练具有 2 个独立输入路径的 2 个自动编码器 并且我想将其中一个输入路径随机设置为零 我将 Tensorflow 与 keras 后端 功能 API 一起使用 我正在计算反向传播的联合损失 两个损失的总和 A gt A B g
  • 重新排序数组时如何用 Angular-Animate 触发 ng-move?

    使用角度1 2 4 我试图弄清楚当重复的项目重新排序时如何触发 ng animate 的移动 我知道 ng animate 正在工作 因为进入 离开和移动的动画都是在应用过滤器时触发的 但是 当我使用某些数组方法对数组重新排序时 不会触发任