使用 ng2-dragula 在 Angular 应用程序中进行拖放操作

Dragula是一个流行的拖放库,而ng2-dragula是一个包装器,可以在角度2+应用程序中使用Dragula。让我们看看它是如何使用的。

安装

首先使用Yarn或npm在您的工程中添加NG2-Dragula

1# Yarn
2$ yarn add ng2-dragula
3
4# npm
5$ npm install ng2-dragula --save

现在导入DraguaModule并将其添加到您的NgModule的导入中:

1[label app.module.ts]
2// ...
3
4import { DragulaModule } from 'ng2-dragula/ng2-dragula';

最后一个设置步骤是将Dragula CSS文件添加到项目中。如果您使用的是ANGLE CLI,,则只需将css文件路径添加到您的.ANGLE-CLIE.json文件中:

1"styles": [
2  "styles.css",
3  "../node_modules/dragula/dist/dragula.css"
4],

使用NG2-Dragula

现在要使用它,只需在模板中的容器元素上使用Dragula指令并提供组名即可。德拉古拉的群体被称为袋子:

1<ul [dragula]='"bag-items"'>
2  <li *ngFor="let item of items">{{ item }}</li>
3</ul>

如果您有多个不同的容器:

1<ul [dragula]='"bag-items"'>
2  <li *ngFor="let item of items">{{ item }}</li>
3</ul>
4
5<ul [dragula]='"bag-people"'>
6  <li *ngFor="let person of people">{{ person }}</li>
7</ul>

如果您希望在Items数组中同步更改,只需使用带有模型名称的draulaModel指令即可。这样,当通过拖放对项目进行重新排序时,项目数组也将对其项目进行重新排序,以反映更改:

1<ul [dragula]='"bag-items"' [dragulaModel]='items'>
2  <li *ngFor="let item of items">{{ item }}</li>
3</ul>

事件和配置选项

您可以使用DragulaService挂钩到事件或设置配置选项。

配置

要使用该服务,首先将其导入并注入到构造函数中。然后,只需调用setOptions方法、指定容器并提供具有所需选项的对象文本即可:

 1import { Component, OnInit } from '@angular/core';
 2
 3import { DragulaService } from 'ng2-dragula/ng2-dragula';
 4
 5@Component({ ... })
 6export class AppComponent implements OnInit {
 7  constructor(private dragula: DragulaService) {
 8    this.dragula.setOptions('bag-items', {
 9      revertOnSpill: true
10    });
11  }
12}

您可以设置诸如direction、copy、copySortSource、revertOnSpill、removeOnSpill和mirrorContainer等选项。配置选项请参考项目页面

事件

您可以挂钩到拖放、over和out事件,每个事件都返回一个observable。下面是一个完整的例子,当拖放一个项目时会显示一条消息:

 1import { Component, OnInit } from '@angular/core';
 2
 3import { DragulaService } from 'ng2-dragula/ng2-dragula';
 4
 5@Component({ ... })
 6export class AppComponent implements OnInit {
 7  msg = '';
 8
 9  items = [
10    'Candlestick',
11    'Dagger',
12    'Revolver',
13    'Rope',
14    'Pipe',
15    'Wrench'
16  ];
17
18  constructor(private dragula: DragulaService) { }
19
20  ngOnInit() {
21    this.dragula
22      .drag
23      .subscribe(value => {
24        this.msg = `Dragging the ${ value[1].innerText }!`;
25      });
26
27    this.dragula
28      .drop
29      .subscribe(value => {
30        this.msg = `Dropped the ${ value[1].innerText }!`;
31
32        setTimeout(() => {
33          this.msg = '';
34        }, 1000);
35      });
36  }
37}

可观察到的拖放事件返回的值是一个包含袋子名称(例如:Bag-Items)、被拖动的元素和容器元素(

    元素)的数组。

    我们的应用在工作!🎥

    使用ng2-dragula的示例

Published At
Categories with 技术
Tagged with
comments powered by Disqus