You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据条件禁用Angular CDK表格行的拖拽功能?

解决方案

要实现当item.disable为true时禁用对应行的拖拽,只需利用Angular CDK Drag提供的cdkDragDisabled输入属性,结合行数据的disable字段即可完成,具体操作如下:

1. 为拖拽行添加禁用控制

在定义表格行的<tr>标签上,绑定cdkDragDisabled属性到当前行的disable字段:

<tr *matRowDef="let row; columns: displayedColumns" 
    mat-row 
    cdkDrag 
    [cdkDragData]="row"
    [cdkDragDisabled]="row.disable"> <!-- 新增禁用绑定 -->
</tr>

2. 添加视觉反馈(可选)

为了让用户直观感知该行不可拖拽,可以给禁用行的拖拽手柄添加样式:

<td mat-cell *matCellDef="let element" class="grab-test">
  <svg
    xmlns="http://www.w3.org/2000/svg"
    height="41"
    viewBox="0 0 23 26"
    width="45"
    style="margin-top: 10px; opacity: {{element.disable ? 0.5 : 1}}; cursor: {{element.disable ? 'not-allowed' : 'grab'}}">
    <!-- svg内容不变 -->
  </svg>
</td>

或者通过CSS类控制更简洁:

/* 利用CDK内置的禁用类 */
.cdk-drag-disabled .grab-test {
  opacity: 0.5;
  cursor: not-allowed;
}

原理说明

cdkDragDisabled是Angular CDK Drag官方提供的属性,当值为true时,对应的cdkDrag元素会被完全禁用拖拽功能,不会触发任何拖拽相关事件,同时CDK会自动给禁用元素添加cdk-drag-disabled类,方便做样式定制。

内容的提问来源于stack exchange,提问作者StaticName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:55:06