代码之家  ›  专栏  ›  技术社区  ›  juliaallyce

手动更新Angular UI UI可排序项

  •  8
  • juliaallyce  · 技术社区  · 10 年前

    本质上,我希望用户能够拖放项目或单击上/下箭头以移动列表中的项目。

    有没有一种很好的方法来更新项目的索引,使其与ui可排序/有角度的ui配合得很好?

    谢谢

    使现代化

    我们能够通过在控制器中添加一个函数来解决这个问题,该函数将从数组中删除该项,并将其添加回一个大于或小于其原始位置的索引中。这里有一个草率的例子:

    $scope.upDown = function(oldIndex, newIndex) {
        var item = $scope.list[oldIndex];
        $scope.list.splice(oldIndex,1);
        $scope.list.splice(newIndex,0,item);
    };
    

    http://jsfiddle.net/69auq/1/

    您需要添加一个检查,检查它是否是数组中的第一个或最后一个元素,以相应地禁用向上或向下。

    2 回复  |  直到 4 年前
        1
  •  0
  •   Community CDub    8 年前

    与AngularJS一样,答案是 "think in Angular, not jQuery" .

    This CodePen 很好地说明了如何做到这一点。基本上,您有一个用于拖动的作用域temp对象,然后将其推入ng repeat的绑定数组。我不能为它(不是我的创作)而感到骄傲,但谷歌很快就引导我做到了这一点。CodePen不使用任何外部依赖项,但正如您所看到的,它比使用类似 Angular-UI .

    这里是 a JSFiddle 显示了相同的概念,但具有Angular UI依赖性。使用angular ui的优点是,绑定数据数组只需要这样调用:

    var myapp = angular.module('myapp', ['ui']);
    
    myapp.controller('controller', function ($scope) {
        $scope.list = ["one", "two", "three", "four", "five", "six"];
    });
    

    这意味着你的工作量减少,因为这已经解决了。AngularJS在使用jQuery方面做得很好,因此这不应该导致jQuery UI的开发方法发生巨大变化,这取决于您的用例。

        2
  •  0
  •   juliaallyce    10 年前

    我们能够通过在控制器中添加一个函数来解决这个问题,该函数将从数组中删除该项,并将其添加回一个大于或小于其原始位置的索引中。这里有一个草率的例子:

    $scope.upDown = function(oldIndex, newIndex) {
        var item = $scope.list[oldIndex];
        $scope.list.splice(oldIndex,1);
        $scope.list.splice(newIndex,0,item);
    };
    

    http://jsfiddle.net/69auq/1/

    您需要添加一个检查,检查它是否是数组中的第一个或最后一个元素,以相应地禁用向上或向下。