2017-04-19 8 views
1

ドラッグでドロップしようとしています。ng2ドラッグラでコピーします これは私のテンプレートです。ドラッグドラッグドラッグアンドドロップで片方向コピーng2

`<div> 
    <div class='wrapper'> 
    <div class='container' id='no-drop' [dragula]='"first-bag"'> 
     <div>Drag/drop item 1</div> 
    </div> 
    <div class='container' [dragula]='"first-bag"'> 
     <div>Drag/drop item 2</div> 
    </div> 
    </div> 
</div>` 

自分のコンポーネントにコピーするオプションを設定しました。

constructor(private dragulaService: DragulaService) { 
dragulaService.setOptions('first-bag', { 
    copy: true 
}); 

私がfalseに移動すると、ドラッグすることができません。どのように私は左から右へと他の方法で移動することはできません。

答えて

2

投稿後すぐに回答が見つかりました!

constructor(private dragulaService: DragulaService) { 
    dragulaService.setOptions('first-bag', { 
     copy: true, 
     moves: function (el, container, handle) { 
     return container.id !== 'no-drop'; 
     } 
    }); 
0

私は、移動機能を使用する代わりに受け入れ機能を使用することをお勧めします。

移動機能を使用すると、コンテナからのアイテムの移動を停止できるためです。ターゲットコンテナが有効かどうかを決定する関数を受け入れる。

accepts: function (el, target, source, sibling) { 
       // your condition 
      }, 
0

デフォルトでは、dragulaはユーザーが任意のコンテナ内の要素をドラッグしてリスト内の他のコンテナにドロップできるようにします。要素がコンテナのいずれかではない場所にドロップされた場合、イベントはrevertOnSpillおよびremoveOnSpillオプションに従って正常にキャンセルされます。

以下の例では、要素を左から右に、右から左にドラッグできます。 HomePage.component.html

<div class="wrapper"> <div class="container master" [dragula]="'editor-bag'" [dragulaModel]="q1"> 

     <div *ngFor="let item of q1" class="box"> 
     {{item}} 
     </div> 
</div> 
<div class="container" [dragula]="'editor-bag'"> 
</div> 

次のコードを作成し 、HomePageComponent.tsを作成します。 (EL、ターゲット、ソース、兄弟)

import { DragulaService, DragulaDirective } from 'ng2-dragula/ng2-dragula'; 
import { Router, Route, ActivatedRoute } from '@angular/router'; 
import { Component, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-home-page', 
    templateUrl: './home-page.component.html', 
    styleUrls: ['./home-page.component.css'], 
}) 
export class HomePageComponent implements OnInit { 
    q1 = []; 
    q2 = []; 
    static _debug: boolean = false; 
    _debug: boolean = HomePageComponent._debug; 
    constructor(private dragulaService: DragulaService, private router: Router, private route: ActivatedRoute) { 
    for (var i = 0; i < 10; i++) { 
     this.q1.push("1. <" + i + ">"); 
     //this.q2.push("2. <" + i + ">"); 
    } 

     dragulaService.setOptions('editor-bag', {  
     accepts: function (el, target, source, sibling) { 
     var fn_debug = true; 
     var acceptAll = false; 

      if (this._debug || fn_debug) { 
      console.log("accepts() start el, target, source, sibling"); 
      console.log({ el, target, source, sibling }); 
      } 
      if (target.classList.contains('master')) { 
      return false; 
      } 
      if (sibling == null) { 
      return (target.children.length == 0); 
      } 
      var name: string = el.innerText; 
      return false; 
     }, 

     direction: 'vertical',    // Y axis is considered when determining where an element would be dropped 
     copy: function (el, source) { 
     if (this._debug) { 
      console.log("copy() start"); 
      console.log(el); 
      console.log(source); 
      console.log("copy() stop"); 
     } 
     return source.classList.contains('master'); 
     },      // elements are moved by default, not copied 
     copySortSource: false,    // elements in copy-source containers can be reordered 
     revertOnSpill: false,    // spilling will put the element back where it was dragged from, if this is true 
     removeOnSpill: true,    // spilling will `.remove` the element, if this is true 
     mirrorContainer: document.body, // set the element that gets mirror elements appended 
     ignoreInputTextSelection: true  // allows users to select input text, see details below 
    }) 
    } 
    ngOnInit() { 

     this.dragulaService.drag.subscribe((value: any) => { 
     if (this._debug) { 
      console.log("drag start"); 
      console.log(value); 
      console.log("drag stop"); 
      console.log(`drag: ${value[0]}`); 
     } 
     // this.onDrag(value.slice(1)); 
     }); 

     this.dragulaService.drop.subscribe((value: any) => { 
     console.log(`drop: ${value[0]}`); 
     //this.onDrop(value.slice(1)); 
     }); 

     this.dragulaService.over.subscribe((value: any) => { 
     if (this._debug) { console.log(`over: ${value[0]}`); } 
     // this.onOver(value.slice(1)); 
     }); 

     this.dragulaService.out.subscribe((value: any) => { 
     if (this._debug) { console.log(`out: ${value[0]}`); } 
     //this.onOut(value.slice(1)); 
     }); 
    } 

} 

それも誰かを助けるかもしれないと私は私の解決策を掲載しています:また、設定することが必要なのは次のシグネチャを持つメソッドを受け付けます。

関連する問題