如何在Angular2中实现拖放?

the*_*eva 11 angular

我想使用Angular 2实现拖放.我有一些项目:

<div class="item"></div>
Run Code Online (Sandbox Code Playgroud)

我希望能够在容器中拖放:

<div class="container"></div>
Run Code Online (Sandbox Code Playgroud)

我在Angular 2中找不到任何好的信息来源.我找到了这个文件:https://github.com/AngularClass/angular2-examples/blob/master/rx-draggable/directives/draggable.ts我尝试但我无法让它工作,我也不完全确定它应该如何工作.

我该如何实现它?

小智 18

试试这个:

function onDragStart(event, data) {
  event.dataTransfer.setData('data', data);
}
function onDrop(event, data) {
  let dataTransfer = event.dataTransfer.getData('data');
  event.preventDefault();
}
function allowDrop(event) {
  event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
<div (drop)="onDrop($event, dropData)" (dragover)="allowDrop($event)"></div>
<div draggable="true" (dragstart)="onDragStart($event, dragData)"></div>
Run Code Online (Sandbox Code Playgroud)


Sat*_*000 9

试试这个:

systemjs.config:

var map =       {
    'app': './wwwroot/ngApp',
    'rxjs': './wwwroot/js/libs/rxjs',
    '@angular': './wwwroot/js/libs/@angular',
    'dragula': './wwwroot/js/libs/dragula/dist/dragula.js',
    'ng2-dragula': './wwwroot/js/libs/ng2-dragula'
  };

var packages = {
    'app': { main: 'main.js', defaultExtension: 'js' },
    'rxjs': { defaultExtension: 'js' },
    'dragula': { defaultExtension: 'js' },
    'ng2-dragula': {defaultExtension: 'js' }
  };

var config = {
    map: map,
    packages: packages  
  }`
Run Code Online (Sandbox Code Playgroud)

然后导入

import {Dragula, DragulaService} from 'ng2-dragula/ng2-dragula';
Run Code Online (Sandbox Code Playgroud)

在@Component中

directives: [Dragula], viewProviders: [DragulaService]
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常好的拖放实现.我真的很喜欢你的业务逻辑.虽然没有足够的jquery (3认同)

Bhu*_*kar 5

我建议使用Ng2-Dragula.

它是angular2依赖项,可以轻松地为您的应用程序提供拖放功能.

您需要做的就是通过npm安装此依赖项.

npm install ng2-dragula dragula --save
Run Code Online (Sandbox Code Playgroud)

添加包含在index.html内部并将系统配置为

<script src="/node_modules/ng2-dragula/bundles/ng2-dragula.js"></script>
<link href="/node_modules/ng2-dragula/src/public/css/dragula.min.css" rel='stylesheet' type='text/css'>
<script>
    System.config({        
    paths:{
        'dragula'         : '../node_modules/dragula/dist/dragula.min.js'
    },
    packages: {            
      app: {
        format: 'register',
        defaultExtension: 'js'
      }
    }
  });

 System.import('app/main')
       .then(null, console.error.bind(console));
</script>
Run Code Online (Sandbox Code Playgroud)

将它导入到你想要使用拖放的组件内,你很高兴.

@Component({
  selector: 'sample',
  directives: [Dragula],
  viewProviders: [DragulaService],
  template:`
  <div>
    <div class='wrapper'>
      <div class='container' [dragula]='"first-bag"'>
        <div>You can move these elements between these two containers</div>
        <div>Moving them anywhere else isn't quite possible</div>
        <div>There's also the possibility of moving elements around in the same container, changing their position</div>
      </div>
      <div class='container' [dragula]='"first-bag"'>
        <div>This is the default use case. You only need to specify the containers you want to use</div>
        <div>More interactive use cases lie ahead</div>
        <div>Make sure to check out the <a href='https://github.com/bevacqua/dragula#readme'>documentation on GitHub!</a></div>
      </div>
    </div>
  </div>
  `
})
class Sample {}
Run Code Online (Sandbox Code Playgroud)


TGH*_*TGH 3

我已经使用 jquery Draggable 完成了它 - 集成在 Angular 中

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

declare var jQuery:any;

@Component({
    selector: 'jquery-integration',
    templateUrl: './components/jquery-integration/jquery-integration.html'
})
export class JqueryIntegration implements OnInit {
    elementRef: ElementRef;
    constructor(elementRef: ElementRef) {
        this.elementRef = elementRef;
    }
    ngOnInit() {
        jQuery(this.elementRef.nativeElement).draggable({containment:'#draggable-parent'});
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息在这里: http://www.syntaxsuccess.com/viewarticle/using-jquery-with-angular-2.0

现场演示: http://www.syntaxsuccess.com/angular-2-samples/#/demo/jquery

  • 我宁愿在 Angular2 中完成它而不使用 jQuery。正如您链接的文章中所说,使用 jQuery 不是 Angular 的做事方式。但如果我没有找到更好的解决方案,我会考虑这个解决方案。 (4认同)