# angular-dragula
**Repository Path**: yzc_1988/angular-dragula
## Basic Information
- **Project Name**: angular-dragula
- **Description**: :ok_hand: Drag and drop so simple it hurts
- **Primary Language**: HTML
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-10-03
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[![logo.png][3]][2]
> Drag and drop so simple it hurts
Official Angular wrapper for [`dragula`][4].
# Demo
[![demo.png][1]][2]
Try out the [demo][2]!
# Install
You can get it on npm.
```shell
npm install angular-dragula --save
```
Or bower, too.
```shell
bower install angular-dragula --save
```
# Setup
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.
```js
var angular = require('angular');
var angularDragula = require('angular-dragula');
var app = angular.module('my-app', [angularDragula(angular)]);
```
# Usage
This package isn't very different from `dragula` itself. I'll mark the differences here, but please refer to the documentation for [`dragula`][4] if you need to learn more about `dragula` itself.
## Directive
There's a `dragula` directive _[(as seen in the demo)][2]_ that allows you to group containers together, as long as they belong to the same scope. That grouping of containers is called a `bag`.
```html
```
### `dragula-scope`
`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.
```html
```
### `dragula-model`
If your `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
```html
```
The standard `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 `Events`
### `drake` options
If you need to configure the `drake` _(there's only one `drake` per `bag`)_, you'll have to use the `dragulaService`.
```js
app.controller('ExampleCtrl', ['$scope', 'dragulaService',
function ($scope, dragulaService) {
dragulaService.options($scope, 'third-bag', {
removeOnSpill: true
});
}
]);
```
## Events
Whenever a `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 `bag`.
```html
```
```js
app.controller('ExampleCtrl', ['$scope', function ($scope) {
$scope
.$on('evented-bag.over', function (e, el) {
el.addClass('over');
})
.$on('evented-bag.out', function (e, el) {
el.removeClass('over');
});
]);
```
Note that these derived events don't expose the DOM elements directly. The elements get wrapped in `angular.element` calls.
## 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 |
## `dragulaService`
This service exposes a few different methods with which you can interact with `dragula` in the Angular way.
### `dragulaService.add(scope, name, drake)`
Creates a `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)`
Sets the `options` used to instantiate a `drake`. Refer to the documentation for [`dragula`][4] to learn more about the `options` themselves.
### `dragulaService.find(scope, name)`
Returns the `bag` for a `drake` instance. Contains the following properties.
- `name` is the name that identifies the bag under `scope`
- `drake` is the raw `drake` instance itself
### `dragulaService.destroy(scope, name)`
Destroys a `drake` instance named `name` scoped under `scope`.
# License
MIT
[1]: https://github.com/bevacqua/angular-dragula/blob/master/resources/demo.png
[2]: http://bevacqua.github.io/angular-dragula/
[3]: https://github.com/bevacqua/angular-dragula/blob/master/resources/logo.png
[4]: https://github.com/bevacqua/dragula