スタックブリッツ: https://stackblitz.com/edit/league-predictions
サッカーリーグの順位を予測したいプロジェクトがあります。2 つのリストがあります。1 つは予測が行われる場所で、もう 1 つはすべてのチームのリストです。
最初は予測リストは空なので、チームをドラッグし始めることができます。ただし、空であるため、最初のチームが自動的に 1 位にランク付けされます。もちろん、後で並べ替えることもできますが、私が欲しいのは、チームの数に基づいて事前に定義されたスロットです。このようにして、チームを適切な場所に直接ドラッグできます。
これを達成する方法について、インターネット上で解決策を実際に見つけることができません。
これが私の現在の状況なので、私が話していることがわかるでしょう: リーグ予測
誰かがAngular CDK DragDropのスロットを事前定義する方法を知っていますか?
これが私の現在のコードです。
<div class="container">
<div class="example-container">
<h5>Predictions</h5>
<div
cdkDropList
#predictionsList="cdkDropList"
[cdkDropListData]="predictions"
[cdkDropListConnectedTo]="[teamList]"
class="example-list"
(cdkDropListDropped)="drop($event)"
>
<div class="example-box" *ngFor="let prediction of predictions; let i = index" cdkDrag>
<app-team [team]="prediction" [index]="i"></app-team>
</div>
</div>
</div>
<div class="example-container">
<h5>Teams</h5>
<div
cdkDropList
#teamList="cdkDropList"
[cdkDropListData]="teams"
[cdkDropListConnectedTo]="[predictionsList]"
class="example-list"
(cdkDropListDropped)="drop($event)"
>
<div class="example-box" *ngFor="let team of teams;" cdkDrag>
<app-team [team]="team"></app-team>
</div>
</div>
</div>
</div>
チームの長いリストは気にしないでください。これはすべてデータベースからのデータです。
import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
predictions = [
];
teams = [
{
name: 'ADO Den Haag',
logo: 'Ado-Den-Haag-Logo.png'
},
{
name: 'Ajax',
logo: 'AFC-Ajax-Logo.png'
},
{
name: 'AZ',
logo: 'AZ-Alkmaar-Logo.png'
},
{
name: 'FC Emmen',
logo: 'FC-Emmen-Logo.png'
},
{
name: 'FC Groningen',
logo: 'FC-Groningen-Logo.png'
},
{
name: 'FC Twente',
logo: 'fc-twente-logo.png'
},
{
name: 'FC Utrecht',
logo: 'FC-Utrecht-Logo.png'
},
{
name: 'Feyenoord',
logo: 'Feyenoord-Rotterdam-Logo.png'
},
{
name: 'Fortuna Sittard',
logo: 'Fortuna-Sittard-Logo.png'
},
{
name: 'Heracles',
logo: 'Heracles-Almelo-Logo.png'
},
{
name: 'PEC Zwolle',
logo: 'PEC-Zwolle-Logo.png'
},
{
name: 'PSV',
logo: 'PSV-Eindhoven-Logo.png'
},
{
name: 'RKC Waalwijk',
logo: 'rkc-waalwijk.png'
},
{
name: 'SC Heerenveen',
logo: 'SC-Heerenveen-Logo.png'
},
{
name: 'Sparta Rotterdam',
logo: 'Sparta_Rotterdam_logo.png'
},
{
name: 'Vitesse',
logo: 'Vitesse-Arnhem-Logo.png'
},
{
name: 'VVV Venlo',
logo: 'VVV-Venlo-Logo.png'
},
{
name: 'Willem II',
logo: 'Willem-II-Logo.png'
},
];
drop(event: CdkDragDrop<string[]>) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
}
}
}