zoukankan      html  css  js  c++  java
  • angular2 支持排序的拖拽组件ng2-dragula

     

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

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

     

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

    一、安装

    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 };

     

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

     

  • 相关阅读:
    判断ascii码是什么的函数
    php curl
    js form settimeout
    windows php文件下载地址
    面试(3)
    [读码时间] 显示单击的坐标
    [读码时间] 模拟select控件
    [读码时间] 星级评分
    [读码时间] 事件练习:封闭兼容性添加,删除事件的函数
    [读码时间] 数组方法的使用
  • 原文地址:https://www.cnblogs.com/yanliujun-tangxianjun/p/7654698.html
Copyright © 2011-2022 走看看