Angular 2 kullanarak sürükle ve bırakmaya izin vermenin en yaygın iki yolu vardır. İlk olarak Açısal tabanlı açık kaynak kitaplıklarından birini kullanır (birkaç tane vardır); ve ikinci sürükle ve bırak için jQuery UI kütüphanesi kullanıyor. Bazı araştırmalardan sonra çoğunun Açısal 1.x için yapıldığını ve hala ihtiyacım olan tüm özellikleri desteklemediğini tespit ettim.
Bu yüzden TypeScript kitaplıklarını kullanarak jQuery kullanarak sürükle bırak uygulamamı yapmaya karar verdim.
Sürükle & desteğini desteklemek için jQuery JavaScript dosyalarını projemde ve index.html
dosyasında alıp bırakın. Angular + TypeScript projesinde kullanmadan önce jQuery dosyalarını aldıktan sonra, sürükle ve bırak için özel bir uygulama verecek olan jquery.d.ts
ve jqueryui.d.ts
gerektirir.
Adım
1 projesinin kök dizininde aşağıdaki komutları yürütün: Yukarıdaki komutlar
// install tsd
npm install tsd -g
// install jquery.d.ts
tsd install jquery --save
// install jqueryui.d.ts
tds install jqueryui --save
jQuery için tür spesifik eşleme kuracaktır burada gösterildiği gibi projenin klasörü yazarak içine.
Uygulamamda, iki karenin arasında sürüklenebilen parçaların ve parçaların sürüklenebildiği pano karesi düşebilir. Bunu desteklemek için varolan kareyi (html şablonu) CSS sınıfı droppable-square
'u ekleyin ve daha sonra kare yapmak için kullanılabilir. Ve satranç parçasını sürüklenebilir yapmak için CSS sınıfı draggable-piece
'u ekleyin.
<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>
sürüklenebilir ve droppable uygulanması için Adım 3
, parçalar hareketli hale getirmek için mantığı vardır PieceMover adlı yeni bir sınıf oluşturdu. Aşağıdaki kod tabanında gösterildiği gibi CSS sınıflarının üzerinde sürüklenebilen &'u düşürülebilir kılar ve yalnızca karenin kareye değil de karenin üzerine düşmesine izin veren kısıtlamalar getirir. Taşıyıcıların üzerinde durduğu sürükle-bırakma işlemi sırasında yatılıyı göstermek için birkaç ek mantık vardır.
Bağımlılık Enjeksiyon - Eğik 2
Bağımlılık Enjeksiyon C# gibi herhangi zengin sunucu tarafı geliştirme dillerinin olarak Açısal 2. en değerli özelliklerden biridir, Java Bağımlılık desteklemek için IoC kapsayıcı olmasını sağlar Benzer şekilde Enjeksiyon, Açısal 2 DI sağlar. Bağımlılık Enjeksiyon, sınıflar arasındaki bağımlılıkları ayırmayı ve modüler gelişmeyi desteklemeyi sağlar. Sınıfın üstündeki PieceMover
sınıf kodunda görüldüğü gibi, @Injectable()
ile dekore edilmiştir; bu, Angular 2'nin DI kapsayıcısına bu sınıfın enjekte edilebileceğini gösterir. PieceMover
sınıf kodunun ilk satırındaki Enjekte edilebilir ithalatı da dikkate alın. Bu durumda, BoardComponent
olan tüketici sınıfı, Angular 2 DI konteyneri tarafından çözülmesi gereken belirli bağımlılıklara "sağlayıcılar" dizisini kullanır. Yapıcı, DI tarafından enjekte edilecek/çözülecek olan PieceMover
tip parametresini alır. Yukarıda belirtilen bağımlılıkları çözdükten sonra, parçaların satranç karelerine taşınmasını sağlayan BoardComponent
çağrı metodu MakePiecesMovable()
yöntemini gösterdikten sonra.
UPD:
; böylece Dragula ve DragulaService'i kullanabiliyorum, intellij onu almıyor ... bu ithalatta yanlış bir şey görüyor musunuz? @rinukkusu –
ilgili bir çözüm değil –