如何使用 ng2-dragula 设置 angular-quickstart

How to set up angular-quickstart with ng2-dragula

我已按照此处的说明进行操作:https://github.com/valor-software/ng2-dragula/wiki#5-min-quickstart as well as here: https://www.npmjs.com/package/ng2-dragula

Angular-quickstart 正在运行,根据:

git clone  https://github.com/angular/quickstart  angular2-dragula-test
npm install
npm start

"My First Angular App"(在浏览器中弹出 - 所以一切正常)

我通过以下方式安装 dragula:

npm install ng2-dragula dragula --save

我用 valor-software ng2-dragula wiki(第一个 link)的确切内容替换了快速入门文件。

如果有人可以提供任何建议(关于未列出的关键步骤)或简单的完整性检查,我们将不胜感激。

要解决 "zone.js:1274 GET localhost:3000/ng2-dragula/ng2-dragula 404 (Not Found)" 错误,请在您的 systemjs.config.js

中添加以下块
var map =       {
    ...
    'dragula': 'node_modules/dragula/dist/dragula.js',
    'ng2-dragula': 'node_modules/ng2-dragula'
  };

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

这些是使用 angular-quickstart 设置 ng2-dragula 基本测试应用程序的完整说明(如果使用 Angular-CLI,请参阅底部 "UPDATE using Angular-CLI"):

设置一个新的 angular-quickstart 项目:

mkdir angular2-dragula-test
git clone  https://github.com/angular/quickstart  angular2-dragula-test
cd angular2-dragula-test
npm install
npm start

如果一切顺利,您应该有一个网页说明 "My First Angular 2 App",基本的 angular2-quickstart 正在运行,我们现在将添加 dragula。

npm install ng2-dragula dragula

index.html 中,我们将通过添加以下行来添加 dragula.css:

<link rel="stylesheet" href="node_modules/dragula/dist/dragula.css">

这是我的完整index.html供参考:

<!DOCTYPE html>
<html>
  <head>
    <title>Angular QuickStart</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="styles.css">
    <!-- dragula css -->
    <link rel="stylesheet" href="node_modules/dragula/dist/dragula.css">

    <!-- Polyfill(s) for older browsers -->
    <script src="node_modules/core-js/client/shim.min.js"></script>

    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>

    <script src="systemjs.config.js"></script>
    <script>
      System.import('app').catch(function(err){ console.error(err); });
    </script>
  </head>

  <body>
    <my-app>Loading...</my-app>
  </body>
</html>

systemjs.config.js(查找 两个 评论“//*** dragula 需要以下内容* *******************" 如果您只想添加相关行 ):

/**
 * System configuration for Angular samples
 * Adjust as necessary for your application needs.
 */
(function (global) {
    System.config({
        paths: {
// paths serve as alias
            'npm:': 'node_modules/'
        },
        // map tells the System loader where to look for things
        map: {
            // our app is within the app folder
            app: 'app',
            // angular bundles
            '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
            '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
            '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
            '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
            '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
            '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
            '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
            '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
            '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
            // other libraries
            'rxjs': 'npm:rxjs',
            'angular-in-memory-web-api': 'npm:angular-in-memory-web-api',
            //***the following is required by dragula********************
            'dragula': 'node_modules/dragula',
            'ng2-dragula': 'node_modules/ng2-dragula',
            'contra': 'node_modules/contra',
            'atoa': 'node_modules/atoa',
            'ticky': 'node_modules/ticky',
            'crossvent': 'node_modules/crossvent/src',
            'custom-event': 'node_modules/custom-event',
        },
        // packages tells the System loader how to load when no filename and/or no extension
        packages: {
            app: {
                main: './main.js',
                defaultExtension: 'js'
            },
            rxjs: {
                defaultExtension: 'js'
            },
            'angular-in-memory-web-api': {
                main: './index.js',
                defaultExtension: 'js'
            },
            //***the following is required by dragula********************
            'dragula': {main: 'dragula.js', defaultExtension: 'js'},
            'ng2-dragula': {defaultExtension: 'js'},
            'contra': {main: 'contra.js', defaultExtension: 'js'},
            'atoa': {main: 'atoa.js', defaultExtension: 'js'},
            'ticky': {main: 'ticky.js', defaultExtension: 'js'},
            'crossvent': {main: 'crossvent.js', defaultExtension: 'js'},
            'custom-event': {main: 'index.js', defaultExtension: 'js'},
        }
    });
})(this);

app.module.ts中导入DragulaModule:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent }  from './app.component';
import { DragulaModule } from 'ng2-dragula/ng2-dragula'; //THIS IS NEW***

@NgModule({
  imports: [ BrowserModule, DragulaModule ], //ADDED DragulaModule***
  declarations: [ AppComponent],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

将 app.component.ts 替换为以下内容:

import { Component } from '@angular/core';

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

@Component({
    selector: 'my-app',
    template: `<h1>My First Angular 2 App</h1>
      <div>
        <div class='wrapper'>
          <div class='container' [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>
    `,
    viewProviders: [DragulaService],
    styles: [`
    .wrapper {
      display: table;
    }
    .container {
      display: table-cell;
      background-color: rgba(255, 255, 255, 0.2);
      width: 50%;
    }
    .container:nth-child(odd) {
      background-color: rgba(0, 0, 0, 0.2);
    }
    .container div,
    .gu-mirror {
      margin: 10px;
      padding: 10px;
      background-color: rgba(0, 0, 0, 0.2);
      transition: opacity 0.4s ease-in-out;
    }
    .container div {
      cursor: move;
      cursor: grab;
      cursor: -moz-grab;
      cursor: -webkit-grab;
    }
    .gu-mirror {
      cursor: grabbing;
      cursor: -moz-grabbing;
      cursor: -webkit-grabbing;
    }
    `]
})
export class AppComponent { }

使用 Angular-CLI 更新

幸运的是,说明比上面要求的要简单:

首先建立一个新项目,并添加Dragula:

ng new ngcli-dragula
cd ngcli-dragula
npm install ng2-dragula dragula

如果出现如下错误:

npm install ng2-dragula dragula
ngcli-dragula@0.0.0 /home/quaterion/Development/ngcli-dragula
├── UNMET PEER DEPENDENCY @angular/compiler@4.0.3
├── UNMET PEER DEPENDENCY @angular/forms@4.0.3
├─┬ dragula@3.7.2 
│ ├─┬ contra@1.9.4 
│ │ ├── atoa@1.0.0 
│ │ └── ticky@1.0.1 
│ └─┬ crossvent@1.5.4 
│   └── custom-event@1.0.0 
└── ng2-dragula@1.3.1 

然后你需要升级 angular-cli,升级 npm 可能也是个好主意:

npm install npm -g
npm install -g @angular/cli

将以下行添加到您的 index.html:

<link rel="stylesheet" href="node_modules/dragula/dist/dragula.css">

在 app.module.ts 中导入 DragulaModule(见两条评论“//NEW”):

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { AppComponent } from './app.component';

import { DragulaModule } from 'ng2-dragula/ng2-dragula'; //NEW

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    DragulaModule//NEW
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

在app.component.ts中导入DragulaService(见两条注释“//NEW”):

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  viewProviders: [DragulaService]//NEW
})
export class AppComponent {
  title = 'app works!';
}

更新 html (app.component.html) 所以有一个工作示例:

<h1>
    {{title}}
</h1>
<div>
    <div class='wrapper'>
        <div class='container' [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>

现在有一个工作示例,CSS 的这个可选块将使示例看起来更好 (app.component.css):

.wrapper {
  display: table;
}
.container {
  display: table-cell;
  background-color: rgba(255, 255, 255, 0.2);
  width: 50%;
}
.container:nth-child(odd) {
  background-color: rgba(0, 0, 0, 0.2);
}
.container div,
.gu-mirror {
  margin: 10px;
  padding: 10px;
  background-color: rgba(0, 0, 0, 0.2);
  transition: opacity 0.4s ease-in-out;
}
.container div {
  cursor: move;
  cursor: grab;
  cursor: -moz-grab;
  cursor: -webkit-grab;
}
.gu-mirror {
  cursor: grabbing;
  cursor: -moz-grabbing;
  cursor: -webkit-grabbing;
}

现在你应该有一个工作示例了。