This directive allows you to sort array with drag & drop.
- JQuery
- JQueryUI
- AngularJS 1.0.x
Note for AngularJS 1.2 users: Use the separate branch angular1.2
.
Load the script file: sortable.js in your application:
<script type="text/javascript" src="modules/directives/sortable/src/sortable.js"></script>
Add the sortable module as a dependency to your application module:
var myAppModule = angular.module('MyApp', ['ui.sortable'])
Apply the directive to your form elements:
<ul ui-sortable ng-model="items">
<li ng-repeat="item in items">{{ item }}</li>
</ul>
Note: ng-model
is required, so that the directive knows which model to update.
All the jQueryUI Sortable options can be passed through the directive.
myAppModule.controller('MyController', function($scope) {
$scope.items = ["One", "Two", "Three"];
$scope.sortableOptions = {
update: function(e, ui) { ... },
axis: 'x'
};
});
<ul ui-sortable="sortableOptions" ng-model="items">
<li ng-repeat="item in items">{{ item }}</li>
</ul>
Inside the update
callback, you can check the item that is dragged and cancel the sorting.
$scope.sortableOptions = {
update: function(e, ui) {
if (ui.item.scope().item == "can't be moved") {
ui.item.parent().sortable('cancel');
}
}
};
Note: update
occurs before any model/scope changes but after the DOM position has been updated.
So ui.item.scope
and the directive's ng-model
, are equal to the scope before the drag start.
The following pen's are provided as a good starting point to demonstrate issues, proposals and use cases. Feel free to edit any of them for your needs (don't forget to also update the libraries used to your version).
We use Karma and jshint to ensure the quality of the code. The easiest way to run these checks is to use grunt:
npm install -g grunt-cli
npm install && bower install
grunt
The karma task will try to open Firefox and Chrome as browser in which to run the tests. Make sure this is available or change the configuration in test\karma.conf.js
We have one task to serve them all !
grunt serve
It's equal to run separately:
-
grunt connect:server
: giving you a development server at http://127.0.0.1:8000/. -
grunt karma:server
: giving you a Karma server to run tests (at http://localhost:9876/ by default). You can force a test on this server withgrunt karma:unit:run
. -
grunt watch
: will automatically test your code and build your demo. You can demo generation withgrunt build:gh-pages
.