表格单元格内的角CdkDragDrop,并在各行之间拖动

时间:2019-05-14 11:05:43

标签: html angular typescript angular7

我试图在Angular 7中添加一个表,其中的一列包括一个列表,我希望允许用户跨不同行拖放任何这些列表项。

我一直在尝试使用CdkDragDrop并将其放置在表中,但是它似乎没有用。

请在下面找到代码:

    <table
    mat-table
    [dataSource]="general"
    style="width:100%; margin-top: 10px; margin-bottom: 50px"
    *ngIf="general.data.length !== 0">
    <ng-container matColumnDef="Camera_Physical_Index">
      <th mat-header-cell *matHeaderCellDef>Camera Physical Index</th>
      <td mat-cell *matCellDef="let element">
        {{ element.Camera_Physical_Index }}
      </td>
    </ng-container>

    <ng-container matColumnDef="Analytical_Function">
      <th mat-header-cell *matHeaderCellDef>Analytical Function</th>
      <td mat-cell *matCellDef="let element">
        <div
          cdkDropList
          [cdkDropListData]="general.data"
          (cdkDropListDropped)="dropGroup($event)"
        >
          <div
            cdkDropListGroup
            class="example-container"
            cdkDrag
            [cdkDragData]="element"
          >
            <div
              cdkDropList
              class="example-list"
              id="{{ element.Camera_Physical_Index }}"
              [cdkDropListData]="element.Analytical_Function"
              (cdkDropListDropped)="dropItem($event)"
              [cdkDropListConnectedTo]="getConnectedList()"
            >
              <div
                class="example-box"
                *ngFor="let item of element.Analytical_Function"
                cdkDrag
                [cdkDragData]="item"
              >
                {{ item }}
              </div>
            </div>
          </div>
        </div>
      </td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="generalColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: generalColumns"></tr>
  </table>

期望的结果如下:

Desired UI

1 个答案:

答案 0 :(得分:0)

要建立列表连接,应将 cdkDropListGroup 放在该列的ng-container中,这样它将包括该列的所有列表(每行的列表)。

请在下面的示例中找到波纹管堆叠闪击机:

https://stackblitz.com/edit/angular-xzbupf

通常: 如果您有多个列表,并且想要从一个列表拖动到另一个列表:

  1. 您应该通过全局指令 cdkDropListGroup 连接所有这些列表,这样它将自动分组并连接它们。
  2. 在每个可拖动项周围添加 cdkDropList
  3. cdkDrag 添加到项目,使其可拖动
  4. 添加 cdkDropListDropped 事件以监听该事件,以便在用户完成拖动后更新数据模型。

angular material