angular2 支持排序的拖拽组件ng2-dragula

摘要:
1、 安装npminstalling2 dragula--保存II。从模块文件中的“ng2 dragula”导入DragulaModule1导入{DragulaModule};固定的ul[dragulaModel]=“项”>li*ngFor=“删除项目”>leti=index“[class.boxBg]=“list1”>

 

  最近项目上遇到需要拖拽的需求,于是就在github上找了一些相关组件,最后看中了ng2-drag-drop和ng2-dragula,但是ng2-drag-drop组件本身拖拽的时候不支持拖拽元素放在拖拽目标的任意位置,只能放置在拖拽目标那一列的最后。所以最后使用了ng2-dragula。

github地址:https://github.com/valor-software/ng2-dragula

 

需求如下图:可以添加新的栏目,可以删除(删除时需要判断此栏目下是否有上架的图书),拖拽红色框区域可以移动到其他地方,每列二级栏目超过5个则不能拖拽其他栏目进来,每个栏目(含一级和二级)可以双击编辑。

angular2 支持排序的拖拽组件ng2-dragula第1张

一、安装

npm install ng2-dragula --save

二、在module文件引入DragulaModule

1 import { DragulaModule } from 'ng2-dragula';
2 
3 @NgModule({
4   imports: [ 
5     DragulaModule, 
6   ], 
7 })

 

三、引入主要的css

css位置:node_modules/dragula/dist/dragula.css。主要样式如下:

1 .gu-mirror{position: fixed ; margin: 0 ; z-index: 9999 ; opacity: 0.8; }
2 .gu-hide{display: none ;}
3 .gu-unselectable{-webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;}
4 .gu-transit{opacity: 0.2;}

 

四、使用

HTML中,可以使用指令[dragula]='"dragulaBag"' ,dragula是设置可以拖放的区域,如果所有container都不设置,那默认是所有区域都可以拖放;如果设置不一样的,那么只可以在dragula相同的区域相互拖拽。

还可以使用[dragulaModel]='xx',<ul [dragulaModel]='items'> <li *ngFor="let item of items"></li> </ul>如果有拖拽,items的值会自动修改,保存时直接提交items数据即可,非常方便。

也可以自己设置[dragulaOptions]="options",options有一些默认的设置,如默认所有区域可以拖拽,默认拖拽时不可以copy,我们可以根据需求自己任意修改。

 1 部分代码如下:
 2 <div class="container" [dragula]='"dragulaBag"' [dragulaModel]='list1'
 3 [dragulaOptions]="options" (mouseover)="onMouseover(0)" (mouseout)="onMouseout(0)">
 4     <div *ngFor="let lev_2 of list1;let i =index" [class.boxBg]="list1">
 5         <div class="lev_2_li">
 6             <i class="lev_2_drag">
 7             </i>
 8             <input class="lev_2_input" type="text" maxlength="30" placeholder="二级分类(必填)"
 9             [tlEditFocus]="lev_2.selected" [hidden]="!lev_2.selected" [(ngModel)]="lev_2.name">
10             <a class="lev_2_name" title="{{lev_2.name}}" (dblclick)="onEdit(lev_2)"
11             [hidden]="lev_2.selected">
12                 {{lev_2.name}}
13             </a>
14             <span class="lev_2_delete" (click)="onDelete(list1,i)">
15             </span>
16         </div>
17     </div>
18 </div>

 设置每列满5个则不可以拖拽,以及红色框部分出发拖拽,都可以通过重新设置options,ts代码如下:

 1 public options = {
 2     accepts: (el, target, source, sibling) = >{
 3         if (target.children.length >= 5) {
 4             return false;
 5         }
 6         return true;
 7     },
 8     moves: function(el, container, handle) {
 9         return handle.className === 'lev_2_drag';
10     }
11 };

 

(本文原创,转载请注明出处!!)

 

免责声明:文章转载自《angular2 支持排序的拖拽组件ng2-dragula》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一个鼠标键盘控制两台甚至多台主机的方法--Synergylinux安装mysql8.0.25下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FreeMarker之根据模板生成Java代码

FreeMarker根据模板生成Java代码,光这句话,大家想必也知道它的应用了,比如流行的DRY原则,该原则的意思,可简单概述为"不要写重复的代码"。 比如Java中三层架构,数据访问层,业务逻辑层,表现层,光这三层就出现重复性的增删改查及其相关的界面代码。 如何不写重复的增删改查相关的代码,可以参考我的MP实战系列文章和MyBatis的逆向工程(针对J...

vue中的锚链接跳转问题

一、在vue中的锚链接和普通的html不同 关于vue中的锚链接可以参考vue 中的  scrollBehavior 滚动行为。 在router.js中  const router = new VueRouter({     routes,       mode: 'history',       scrollBehavior(to, fro...

Vue.set的使用

原文链接: https://www.jianshu.com/p/e6e8c45e7fd6       更多链接:  https://blog.csdn.net/smartab/article/details/103799929 问题起因:     vue中对象和数组无法双向绑定的情况以及解决方案 这里我定义了一个列表数据,我将通过三个不同的按钮来控制列表...

mysql主从不同步问题 Error_code: 1197

首先查看从的状态 mysql> show slave status G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event...

使用webpack搭建vue开发环境

最近几天项目上使用了vue.js作为一个主要的开发框架,并且为了发布的方便搭配了webpack一起使用。CSS框架使用的是vue-strap(vue 对bootstrap控件做了封装)这篇文章主要总结一下具体搭建的过程,和途中遇到的一些问题的解决办法 主要用到的工具 Vue webpack vue-strap vue-router 搭建步骤 1. 首先...

Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent

Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行 exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于 QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject...