代码之家  ›  专栏  ›  技术社区  ›  VIKAS KOHLI

如何在角材质表中实现拖放功能?

  •  2
  • VIKAS KOHLI  · 技术社区  · 6 年前

    我能够使用ng2 dragula实现拖放功能,但我面临的问题是,它也会拖拽标题行,并且无法从拖拽的行中获取拖拽的行值(其行数据)以及上面和下面的行。

    有人能帮我吗?

    我在github上也发现了同样的问题

    https://github.com/valor-software/ng2-dragula/issues/831

    <mat-table [dataSource]="dataSource"
                   matSort matSortActive="categoryName" matSortDirection="asc" matSortDisableClear
                   [dragula]='"seventh-bag"'>
    
            <ng-container matColumnDef="seqNo">
    
                <mat-header-cell *matHeaderCellDef>S.No.</mat-header-cell>
    
                <mat-cell *matCellDef="let row;let i=index;">
                  {{(paginator.pageSize * (paginator.pageIndex)) + i+1}}
                </mat-cell>
    
            </ng-container>
    
            <ng-container matColumnDef="name">
    
                <mat-header-cell *matHeaderCellDef mat-sort-header (mouseenter)="nameIcon=false" (mouseleave)="nameIcon=true">
                  Category Name
                  <i *ngIf="nameIcon && sort.active=='join'" class="fa fa-sort"></i>
                </mat-header-cell>
    
                <mat-cell
                          *matCellDef="let catg;">
                         name
                </mat-cell>
    
            </ng-container>
    
    
            <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    
            <mat-row *matRowDef="let row; columns: displayedColumns"
            (click)="selectedRow(row)" [ngClass]="{'highlight': selectedRowIndex == row._id}"
            (mouseenter) ="dragRow = row"  (mouseleave) ="mouseLeave('div A')"
            >
              {{row}}
            </mat-row>
    
        </mat-table>
    

    当我使用上述方法时,我无法获取被拖动的行数据及其新位置

    2.)当我实施ng2 dragula时

     <mat-row *matRowDef="let row; columns: displayedColumns"
            (click)="selectedRow(row)"  [dragula]='"seventh-bag"'
            >
    

    那么拖放功能就不能正常工作了

    请参考下面的图片

    When ng2-dragula implement mat-rows then these things happened

    图片来源:- https://user-images.githubusercontent.com/6483007/36256531-4a34b638-124b-11e8-9b13-cd15391886ae.gif

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tom    6 年前

    这可能不是你关于dragula的问题的确切答案,但鉴于目前还没有人尝试过,这里有一个可能的解决方案似乎对我有效:我也尝试过使用mat table进行拖放操作。我没有使用ng2 dragula(我过去使用的是jquery ui sortable),但我确实使用了angulars新的CDK拖放系统。(现在是7.0.0版)。

    https://material.angular.io/cdk/drag-drop/overview

    我遇到的唯一问题是,如果要进行排序,cdkDropList指令必须是cdkDrag元素的直接父元素,不确定是否有办法解决这个问题,我找不到其他选项。

    看到mat tables的构造方式似乎与d&d我已经转向列表或扩展面板(如果你想在每一行上显示扩展表单的下拉列表),因为它们在嵌套时表现得更好,并且可以很好地与cdk的拖放工具配合使用。(你可能需要做一些定制造型,让它看起来像一张桌子)

    我知道mat table不会提供排序、过滤功能,但如果你优先考虑d&d你可能必须找到另一种解决方法。

    希望这能给你带来一些可以合作的东西!