Angular2 NG2-Dragula没有拖拽

时间:2016-06-07 13:09:49

标签: javascript angularjs angular

我正在使用NG2-Dragula

我也在使用这个样板:Download Repo

这是代码:

systemjs.config.js:

(function(global) {

    // map tells the System loader where to look for things
    var map = {
        'app':                        'app', // 'dist',
        'rxjs':                       'node_modules/rxjs',
        '@angular':                   'node_modules/@angular',
        'ng2-dragula':                'node_modules/ng2-dragula', //for ng2-dragula
        'dragula':                    'node_modules/ng2-dragula' //for ng2-dragula
    };

    // packages tells the System loader how to load when no filename and/or no extension
    var packages = {
        'app':                        { main: 'boot.js',  defaultExtension: 'js' },
        'rxjs':                       { defaultExtension: 'js' },
        'ng2-dragula': { main: 'ng2-dragula.js', defaultExtension: 'js' } //for ng2-dragula
    };

    var packageNames = [
        '@angular/common',
        '@angular/compiler',
        '@angular/core',
        '@angular/http',
        '@angular/platform-browser',
        '@angular/platform-browser-dynamic',
        '@angular/router',
        '@angular/testing',
        '@angular/upgrade'
    ];

    // add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' }
    packageNames.forEach(function(pkgName) {
        packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
    });

    var config = {
        map: map,
        packages: packages
    };

    // filterSystemConfig - index.html's chance to modify config before we register it.
    if (global.filterSystemConfig) { global.filterSystemConfig(config); }

    System.config(config);

})(this);

app.component.ts:

import {Component} from '@angular/core';
import {Dragula, DragulaService} from 'ng2-dragula/ng2-dragula';

@Component({
    selector: 'my-app',
    directives: [Dragula],
    viewProviders: [DragulaService],
    template:`
  <div>
    <div class='wrapper'>
      <div class='container' [dragula]='"first-bag"' style="background-color:green;padding:10px;margin-bottom:20px;">
        <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"' style="background-color:red;padding:10px;margin-bottom:20px;">
        <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>
  `,
})
export class AppComponent {

}

如果您尝试拖动div,则不会发生任何事情。

我在这里错过了什么或做错了什么?

控制台:

The actually code is running via npm start ... but the console does has these error: Dragula.prototype.ngOnInit@http://localhost:3000/node_modules/ng2-dragula/src/app/directives/dragula.directive.js:40:26
anonymous/_View_AppComponent0.prototype.detectChangesInternal@AppComponent.template.js:147:88
AppView.prototype.detectChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:200:9
DebugAppView.prototype.detectChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:289:13
AppView.prototype.detectViewChildrenChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:220:13
AppView.prototype.detectChangesInternal@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:211:9
AppView.prototype.detectChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:200:9
DebugAppView.prototype.detectChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view.js:289:13
ViewRef_.prototype.detectChanges@http://localhost:3000/node_modules/@angular/core/src/linker/view_ref.js:119:54
ApplicationRef_.prototype.tick/<@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:361:75
Call@http://localhost:3000/node_modules/es6-shim/es6-shim.min.js:10:4652
forEach@http://localhost:3000/node_modules/es6-shim/es6-shim.min.js:10:19622
ApplicationRef_.prototype.tick@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:361:13
ApplicationRef_.prototype._loadComponent@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:332:9
ApplicationRef_.prototype.bootstrap/<@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:321:13
ApplicationRef_.prototype.run/<@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:292:26
Zone</ZoneDelegate</ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:323:20
NgZoneImpl/this.inner<.onInvoke@http://localhost:3000/node_modules/@angular/core/src/zone/ng_zone_impl.js:45:32
Zone</ZoneDelegate</ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:322:20
Zone</Zone</Zone.prototype.run@http://localhost:3000/node_modules/zone.js/dist/zone.js:216:25
NgZoneImpl.prototype.runInner@http://localhost:3000/node_modules/@angular/core/src/zone/ng_zone_impl.js:76:60
NgZone.prototype.run@http://localhost:3000/node_modules/@angular/core/src/zone/ng_zone.js:223:51
ApplicationRef_.prototype.run@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:290:9
ApplicationRef_.prototype.bootstrap@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:312:16
coreLoadAndBootstrap/</<@http://localhost:3000/node_modules/@angular/core/src/application_ref.js:100:43
Zone</ZoneDelegate</ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:323:20
NgZoneImpl/this.inner<.onInvoke@http://localhost:3000/node_modules/@angular/core/src/zone/ng_zone_impl.js:45:32
Zone</ZoneDelegate</ZoneDelegate.prototype.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:322:20
Zone</Zone</Zone.prototype.run@http://localhost:3000/node_modules/zone.js/dist/zone.js:216:25
scheduleResolveOrReject/<@http://localhost:3000/node_modules/zone.js/dist/zone.js:571:53
Zone</ZoneDelegate</ZoneDelegate.prototype.invokeTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:356:24
NgZoneImpl/this.inner<.onInvokeTask@http://localhost:3000/node_modules/@angular/core/src/zone/ng_zone_impl.js:36:32
Zone</ZoneDelegate</ZoneDelegate.prototype.invokeTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:355:24
Zone</Zone</Zone.prototype.runTask@http://localhost:3000/node_modules/zone.js/dist/zone.js:256:29
drainMicroTaskQueue@http://localhost:3000/node_modules/zone.js/dist/zone.js:474:26
ZoneTask/this.invoke@http://localhost:3000/node_modules/zone.js/dist/zone.js:426:22

2 个答案:

答案 0 :(得分:2)

试试这个:

systemjs.config:

var map =       {
    ...
    'dragula': 'node_modules/dragula/dist/dragula.js',
    'ng2-dragula': 'node_modules/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  
  }`

然后导入

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

在@Component

directives: [Dragula], 
viewProviders: [DragulaService]

答案 1 :(得分:1)

在地图中,dragula和ng2-dragula都指向同一位置。

'ng2-dragula':                'node_modules/ng2-dragula', //for ng2-dragula
'dragula':                    'node_modules/ng2-dragula' //for ng2-dragula

我认为这应该是 -

            'dragula': 'node_modules/dragula/dist/dragula.js',
            'ng2-dragula/*': 'node_modules/ng2-dragula/ng2-dragula.js',

看看这是否有帮助。