Drag and drop so simple it hurts
Official Angular wrapper for
Try out the demo!
You can get it on npm.
npm install angular-dragula --save
Or bower, too.
bower install angular-dragula --save
You'll need to pass in
angularDragula to your module when booting up your application.
angular-dragula takes your
angular instance and uses it to register its own module, service, and directive.
var angular = ;var angularDragula = ;var app = angular;
This package isn't very different from
dragula itself. I'll mark the differences here, but please refer to the documentation for
dragula if you need to learn more about
dragula directive (as seen in the demo) that allows you to group containers together, as long as they belong to the same scope. That grouping of containers is called a
ng-repeat creates a new isolate scope, which can sometimes cause issues with dragging between a bag with multiple containers. To avoid this you can pass in the scope you want the bag to be stored on (and fire events on) by setting the
dragula-scope directive on the bag element.
ng-repeat is compiled from array, you may wish to have it synced. For that purpose you need to provide model by setting the
dragula-model attribute on the bag element
drop event is fired before the model is synced. For that purpose you need to use the
drop-model event. The same behavior exists in the
remove event. Therefore is the
remove-model event. Further details are available under
If you need to configure the
drake (there's only one
bag), you'll have to use the
drake instance created with the
dragula directive emits an event, that event is replicated on the Angular
$scope where the
drake has an associated
bag, and prefixed with the
name on its
Note that these derived events don't expose the DOM elements directly. The elements get wrapped in
Special Events for angular-dragula
|Event Name||Listener Arguments||Event Description|
|drop-model||el, target, source||same as normal drop, but model was synced, just available with the use of dragula-model|
|remove-model||el, container||same as normal remove, but model was synced, just available with the use of dragula-model|
This service exposes a few different methods with which you can interact with
dragula in the Angular way.
dragulaService.add(scope, name, drake)
bag scoped under
scope and identified by
name. You should provide the entire
drake instance. Typically, the directive takes care of this step.
dragulaService.options(scope, name, options)
options used to instantiate a
drake. Refer to the documentation for
dragula to learn more about the
bag for a
drake instance. Contains the following properties.
nameis the name that identifies the bag under
drakeis the raw
drake instance named
name scoped under