我使用 ng2-dragula 开发了一个 angular5 应用程序。用户可以在其中将问题从问题容器拖放到 myfavourite-container。他可以拖动和更改 myfavourite-container 的排序顺序。它在我的应用程序中正常工作。我的用例是对使用 cntrl 键选择的多个项目进行排序。例如,如果我有一个 1,2,3,4,5 的列表,当我使用 ctrl 键选择 2,4 时,就像我们在 Windows 系统中选择文件并放到 1 的位置一样,那么结果列表就像2,4,1,3,5。我已经编写了代码来选择数组中的多个项目。所以我需要拖放多个项目并更改排序顺序。我的代码看起来像
app.component.html
<table border=2>
<tbody id ='dest' [dragula]='"second-bag"' [dragulaModel]="peoples">
<tr *ngFor="let person of peoples" (click)="addThisPersonToArray(person, $event)" [class.active]="isPersonSelected(person)">
<td>{{person.id}}</td>
<td>{{person.firstName}}</td>
<td>{{person.lastName}}</td>
</tr>
</tbody>
</table>
Result items
<ul>
<li *ngFor="let item of peoples"> {{item.firstName}}</li>
</ul>
app.component.ts
import { Component } from '@angular/core';
import { DragulaService } from 'ng2-dragula/ng2-dragula';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
selectedPersonArray = [];
peoples = [
{
id: 1,
firstName: 'First Name 1',
lastName: 'Last Name 1'
},
{
id: 2,
firstName: 'First Name 2',
lastName: 'Last Name 2'
},
{
id: 3,
firstName: 'First Name 3',
lastName: 'Last Name 3'
},
{
id: 4,
firstName: 'First Name 4',
lastName: 'Last Name 4'
}, {
id: 5,
firstName: 'First Name 5',
lastName: 'Last Name 5'
},
{
id: 6,
firstName: 'First Name 6',
lastName: 'Last Name 6'
}
];
toggleItemInArr(arr, item) {
const index = arr.indexOf(item);
index === - 1 ? arr.push(item) : arr.splice(index, 1);
}
addThisPersonToArray(person: any, event) {
if (!event.ctrlKey) {
this.selectedPersonArray = [];
}
this.toggleItemInArr(this.selectedPersonArray, person);
}
isPersonSelected(person: any) {
return (this.selectedPersonArray.indexOf(person) !== -1);
}
}