gpt4 book ai didi

angular - Kendo Sortable for Angular - 获取新的索引位置

转载 作者:太空狗 更新时间:2023-10-29 18:01:18 24 4
gpt4 key购买 nike

使用的框架

  • Angular 和 Kendo 用户界面

我在做什么

  • 我有一个通过Firestore获取的数据列表

  • 它已经根据 firestore 中的属性进行了排序

  • 我安装了 Kendo Sortable 并将其导入到我的模块中

什么在起作用

  • 我可以拖动项目 UI

什么不起作用

  • 根据文档,我正在写入控制台以查看项目的索引

  • onDragStart() 的索引位置似乎是正确的

  • onDragEnd() 总是显示为 -1(见附件截图) console log of dragging items about

问题

  1. 我的目标是四处移动列表项并获得它们的新索引项。希望我可以从那里编写一个函数来将新位置写回数据库。但是,有没有办法确定正确的“结束”索引?

Component.ts

import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore';
import { Router, ActivatedRoute } from '@angular/router';
import { DataEvent, DragDropEvent } from '@progress/kendo-angular-sortable';

@Component({
selector: 'app-albums-list',
templateUrl: './albums-list.component.html',
styleUrls: ['./albums-list.component.css'],
encapsulation: ViewEncapsulation.None // testing
})

export class IssuesListComponent implements OnInit {

private albumsCollection: AngularFirestoreCollection<any>;
albums: Observable<any[]>;
albumFolderId: string;


// KENDO TESTING

public events: string[][] = [[], []];

public onDataAdd(src: number, e: DataEvent): void {
console.log(src, 'dataAdd', e.index);
}

public onDataRemove(src: number, e: DataEvent): void {
console.log(src, 'dataRemove', e.index);
}

public onDragEnd(src: number, e: DragDropEvent): void {
console.log(src, 'dragEnd', e.index);
}

public onDragOver(src: number, e: DragDropEvent): void {
// Not logging due to the large number of events
}

public onDragStart(src: number, e: DragDropEvent): void {
console.log(src, 'dragStart', e.index);
}

// private log(src: number, event: string, itemIndex: number): void {
// this.events[src].push(`${event} - ${this.items[src][itemIndex]}`);
// }

constructor(
private readonly afs: AngularFirestore,
private activatedRoute: ActivatedRoute,
private router: Router
) { }


ngOnInit() {

// Look at the url for the Folder ID and set the local variable
this.activatedRoute.params.forEach((urlParameters) => {
this.albumFolderId = urlParameters['folderId'];

// Return the issues list
this.getAlbumData();

});


}


getAlbumData() {

this.albumCollection = this.afs.collection<any>(`/albumFolders/${this.albumFolderId}/albums`, ref => {
return ref.orderBy('album_order');
});

// Get the data
this.albums = this.albumCollection.snapshotChanges().map(actions => {

return actions.map(a => {

const data = a.payload.doc.data();

const id = a.payload.doc.id;

return { id, ...data };

});
});
}
}

Component.html

 <kendo-sortable
[navigatable]="true"
[animation] = "true"
[data]="albums | async"
class="list__ul"
itemClass="list__li"
activeItemClass=""
(dataAdd)="onDataAdd(i, $event)"
(dataRemove)="onDataRemove(i, $event)"
(dragEnd)="onDragEnd(i, $event)"
(dragOver)="onDragOver(i, $event)"
(dragStart)="onDragStart(i, $event)"
>

<ng-template let-item="item">
<h2 class="list__h2"> {{ item.album_title }} </h2>
<span class="list__sub"> {{ item.album_date}} </span>
</ng-template>

</kendo-sortable>

最佳答案

如果我具体理解ti,你想要一个掺杂文件的索引?

在此 Kendo Angular 2 示例中,您可以看到所需的索引(我添加了控制台日志以显示索引在哪里):

 private handleDragAndDrop(): Subscription {
const sub = new Subscription(() => {});
let draggedItemIndex;

document.querySelectorAll('.k-grid-content tr')
.forEach(item => {
this.renderer.setAttribute(item, 'draggable', true);
const dragStart = Observable.fromEvent(item, 'dragstart');
const dragOver = Observable.fromEvent(item, 'dragover');
const drop = Observable.fromEvent(item, 'drop');

sub.add(dragStart.subscribe(({target}) => {
draggedItemIndex = target.rowIndex;
console.log("Drag start: " + target.rowIndex)
}));

sub.add(dragOver.subscribe((e: any) => e.preventDefault()));

sub.add(drop.subscribe((e: any) => {
e.preventDefault();
const dataItem = this.gridData.data.splice(draggedItemIndex, 1)[0];
const dropIndex = e.target.closest('tr').rowIndex;
this.zone.run(() =>{
console.log("Drag drop/stop: " + dropIndex)
this.gridData.data.splice(dropIndex, 0, dataItem)
}

);
}));
});

http://plnkr.co/edit/gUGZM5yOG4v2CwvsjEV6?p=preview

关于angular - Kendo Sortable for Angular - 获取新的索引位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com