Angular 2を使ってドラッグ&ドロップを可能にする最も一般的な方法は2つあります。まず、角度ベースのオープンソースライブラリの1つを使用しています(いくつかあります)。 2番目はjQuery UIライブラリをドラッグアンドドロップで使用しています。いくつかの調査の後、私はそれらのほとんどがAngular 1.xのために作られていることがわかりましたが、私が必要とするすべての機能をまだサポートしていません。
私は、TypeScriptライブラリを使用してjQueryを使用してドラッグアンドドロップの実装を行うことに決めました。
ドラッグをサポートするには、jQuery JavaScriptファイルをプロジェクトに、index.html
をファイルに追加してドロップを開始します。 Angular + TypeScriptプロジェクトで使用する前にjQueryファイルを取得した後は、ドラッグ&ドロップのタイプ固有の実装を与えるjquery.d.ts
とjqueryui.d.ts
が必要です。
ステップ1
プロジェクトのルートディレクトリで次のコマンドを実行します。ここに示すように、上記のコマンド
// install tsd
npm install tsd -g
// install jquery.d.ts
tsd install jquery --save
// install jqueryui.d.ts
tds install jqueryui --save
は、プロジェクトのフォルダを入力するにはjQueryのためのタイプ固有のマッピングをインストールします。
私の実装では、ボードスクエアはドロップ可能で、ピースはドラッグ可能で、2つの間にドラッグすることができます。これをサポートするために、既存の正方形(htmlテンプレート)を作成してCSSクラスdroppable-square
を追加します。これは、後で正方形のドロップ可能にするために使用されます。そして、CSSクラスdraggable-piece
を追加して、チェスのピースをドラッグ可能にします。
<div *ngFor="let files of Board.Files, let i = index">
<div class="board-square droppable-square" *ngFor="let rank of Board.Ranks, let j = index" [style.background]="Board.Squares[7-i][j].IsWhite ? '#FECE9E': 'D18B46'">
<span class="square-name">{{Board.Squares[7-i][j].SquareId}}</span>
<div *ngIf="Board.Squares[7-i][j].Piece" class="piece draggable-piece"></div>
</div>
</div>
ドラッグとドロップ可能を実現するためのステップ3
は、作品を可動させるためのロジックを持っているPieceMoverという名前の新しいクラスを作成しました。次のコードベースに示すように、上記のCSSクラスはdraftable &をドロップ可能にし、ピースを四角形の外側ではなく、四角形の上にドロップするように制限します。ドラッグ・ドロップ処理中にボーダーを表示する追加のロジックはほとんどありません。
依存性の注入 - 角度2
依存性の注入は、C#などの任意の豊富なサーバーサイドの開発言語としてアンギュラ2の最も貴重な機能の一つであり、Javaは依存関係をサポートするためにIoCコンテナを持つことができます同様に、角度2はDIを可能にする。 Dependency Injectionは、クラス間の依存関係を切り離し、モジュール開発をサポートします。クラスの上のPieceMover
クラスコードに見られるように、@Injectable()
で装飾されています。これは、角度2のDIコンテナにこのクラスが注入可能であることを示します。 PieceMover
クラスコードの1行目の注入可能なインポートにも注意してください。
このケースではBoardComponent
であるコンシューマクラスは、Angular 2 DIコンテナで解決する必要がある特定の依存関係に "providers"配列を使用します。コンストラクタはDIで注入/解決されるタイプPieceMover
のパラメータをとります。上記のように依存関係を解決した後、ボードBoardComponent
を表示した後、メソッドMakePiecesMovable()
を呼び出します。これにより、部分がチェスの四角に移動します。
UPD:
私はcomponent.tsクラスを設定し、 'ng2-dragula/ng2-dragula'からimport {Dragula、DragulaService}をインポートしようとしました。私はDragulaとDragulaServiceを使用することができます。intellijはそれを取得していません...あなたはそのインポートで何か間違っていますか? @リニュククス –
関連しない解決策 –