使用ng2-dragula在您的Angular应用程序中拖放

来自菜鸟教程
跳转至:导航、​搜索

德拉古拉是一个流行的用于拖放的 JavaScript 库,并且 ng2-dragula 是在 Angular 2+ 应用程序中使用 Dragula 的包装器。 让我们看看它是如何使用的。

安装

首先使用 Yarn 或 npm 将 ng2-dragula 添加到您的项目中:

# Yarn
$ yarn add ng2-dragula

# npm
$ npm install ng2-dragula --save

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

app.module.ts

// ...

import { DragulaModule } from 'ng2-dragula/ng2-dragula';

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

"styles": [
  "styles.css",
  "../node_modules/dragula/dist/dragula.css"
],

使用 ng2-dragula

现在要使用它,就像在模板中的容器元素上使用 dragula 指令并提供组名一样简单。 Dragula 中的组称为包:

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

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

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

<ul [dragula]='"bag-people"'>
  <li *ngFor="let person of people">{{ person }}</li>
</ul>

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

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

事件和配置选项

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

配置

要使用该服务,首先将其导入并注入到构造函数中。 然后就像调用 setOptions 方法一样简单,指定容器并提供带有所需选项的对象文字:

import { Component, OnInit } from '@angular/core';

import { DragulaService } from 'ng2-dragula/ng2-dragula';

@Component({ ... })
export class AppComponent implements OnInit {
  constructor(private dragula: DragulaService) {
    this.dragula.setOptions('bag-items', {
      revertOnSpill: true
    });
  }
}

可以设置directioncopycopySortSourcerevertOnSpillremoveOnSpillmirrorContainer等选项。 配置选项参考项目页面

活动

您可以挂钩 dragdropoverout 事件,并且每个事件都返回一个 observable。 这是一个完整的示例,在拖放项目时会显示一条消息:

import { Component, OnInit } from '@angular/core';

import { DragulaService } from 'ng2-dragula/ng2-dragula';

@Component({ ... })
export class AppComponent implements OnInit {
  msg = '';

  items = [
    'Candlestick',
    'Dagger',
    'Revolver',
    'Rope',
    'Pipe',
    'Wrench'
  ];

  constructor(private dragula: DragulaService) { }

  ngOnInit() {
    this.dragula
      .drag
      .subscribe(value => {
        this.msg = `Dragging the ${ value[1].innerText }!`;
      });

    this.dragula
      .drop
      .subscribe(value => {
        this.msg = `Dropped the ${ value[1].innerText }!`;

        setTimeout(() => {
          this.msg = '';
        }, 1000);
      });
  }
}

拖放事件 observables 返回的值是一个包含包名称的数组(例如: 袋子物品 )、被拖动的元素和容器元素(


元素)。

我们的应用程序在工作! 🎥