Angular:捕捉拖放事件

时间:2014-05-28 20:44:40

标签: jquery angularjs javascript-events drag-and-drop event-handling

我使用angular-ui获取一个列表,可以使用"拖放"进行排序,它可以正常工作。

就像这样(工作正常):

的index.html

<ul ui-sortable ng-model="list">
    <li ng-repeat="item in list" class="item">{{item}}</li>
</ul>

app.js

var myapp = angular.module('myapp', ['ui.sortable']);

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

现在,我需要知道列表(这可能是很多具有此行为的列表)发生了变化,我尝试了drop, dropend, drag, ...但是没有得到它。

这里是我的代码http://jsfiddle.net/9sueU/4/

我需要使用倍数列表,例如此处http://jsfiddle.net/b5nqd/1/

2 个答案:

答案 0 :(得分:1)

您需要观看集合以进行更改。即使订单已更改,Angular也会通知您

$scope.$watchCollection('list', function (newVal, oldVal) {
    // DO something
});

我已更新您的小提琴here

答案 1 :(得分:1)

排序列表时,angular-ui将直接更改数组顺序。您可以使用$scope.$watch收听list数组的更改事件。

$scope.$watch("list", function (value) {
    console.log("Changed !", value);
}, true);

您需要将第三个参数作为true传递,以强制Angular使用angular.equals验证更改,而不是基本引用相等。实际上,数组引用没有改变,它仍然是相同的数组,但其内容被修改,因此只有angular.equals可以区分这两者。