Ng2 Dragula 重新排序相同的数组多个放置区域

Posted

技术标签:

【中文标题】Ng2 Dragula 重新排序相同的数组多个放置区域【英文标题】:Ng2 Dragula reorder same array multiple drop zones 【发布时间】:2020-12-02 10:15:47 【问题描述】:

我从高处到低处都搜索过了,结果都干了。 Angular 9.1.11 版,ng2-dragula 2.1.1 版。我想将同一个数组绑定到多个放置区,并且在放置时应该正确地重新排序数组。这与 Dragula 1.3.1 版完美配合,但不适用于 2.1.1 版。这是我的代码:

<div class="row">
        <div class="colWidth()" dragula="playlist-items" [(dragulaModel)]="playlistService.playlist.contentItems">
            <div *ngFor="let contentItem of playlistService.playlist.contentItems; let i = index" class="container-fluid">
                <p-playlist-item *ngIf="i < 10"
                                [contentItem]="contentItem"
                                [index]="i">        
                </p-playlist-item>
            </div>
        </div>

        <div *ngIf="playlistService.playlist.contentItems.length > 10" class="colWidth()" dragula="playlist-items" [(dragulaModel)]="playlistService.playlist.contentItems">
            <div *ngFor="let contentItem of playlistService.playlist.contentItems; let i = index" class="container-fluid">
                <p-playlist-item *ngIf="i > 9 && i < 20"
                                [contentItem]="contentItem"
                                [index]="i">        
                </p-playlist-item>
            </div>
        </div>
</div>

在dragulaService.dropModel('playlist-items') 回调中,当拖入另一列时,该项从sourceModel中移除并插入到targetModel中。我尝试将它从目标模型中拼接出来,但视图仍然没有正确排序。我也尝试过使用单向绑定语法 [dragula]="playlistService.playlist.contentItems"。同样,完全相同的功能适用于 Dragula 版本 1.3.1,所以我只是对最新版本不走运吗?任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

当然,在我提出问题后,我就想出了一个解决方案。我只是使用 column-count css 属性,并根据播放列表的长度动态更新类,同时只绑定一次数组。

<div class="columnCount()" dragula="playlist-items" [(dragulaModel)]="playlistService.playlist.contentItems">
    <p-playlist-item *ngFor="let contentItem of playlistService.playlist.contentItems; let i = index"
                    [contentItem]="contentItem"
                    [index]="i">        
    </p-playlist-item>
</div>

【讨论】:

以上是关于Ng2 Dragula 重新排序相同的数组多个放置区域的主要内容,如果未能解决你的问题,请参考以下文章

2018 年使用 ng2-dragula

ng2-dragula 添加新项目后显示在顶部

区分 ng2-dragula 上的单击或拖动

第二次使用 ng2-dragula 进入页面时出错

在ng2-dragula中询问删除确认

如何使用 Dragula 限制要放置区域的元素数量?