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

Antdv 1.7.8 Table组件如何仅为特定行显示展开图标

Ant Design Vue 1.7.8 表格按条件显示展开图标方案

直接用组件自带的两个配置项就能实现,不需要hack样式:

  • expandIcon:自定义展开图标渲染规则,逐行判断是否渲染图标
  • rowExpandable:控制行是否允许展开,从逻辑层面拦截不符合条件的行展开行为

代码修改

模板部分

给<a-table>新增两个属性绑定,原有配置和插槽完全不用动:

<a-table
  :columns="columns"
  :row-key="record => record.id"
  :data-source="tableData"
  :pagination="{hideOnSinglePage:true}"
  :expand-icon-as-cell="false"
  :expand-icon-column-index="2"
  :expand-row-by-click="false"
  :expandIcon="customExpandIcon"
  :rowExpandable="record => record.items.length > 0"
>
  <!-- 原有expandedRowRender、items插槽内容保持不变 -->
</a-table>

JS部分

在实例里加对应的customExpandIcon方法即可:

var Main = {
  data() {
    return {
      columns: [
        { title: 'ID', dataIndex: 'id' },
        { title: 'Name', dataIndex: 'name' },
        { title: 'Nº items', dataIndex: 'items', scopedSlots: { customRender: 'items' } }
      ],
      tableData: [
        { "id": 1, "name": "Alex", "items": [] },
        { "id": 2, "name": "Boris", "items": [{ "id": 1, "name": "Don Quixote" }, { "id": 2, "name": "Moby Dick" }] },
        { "id": 3, "name": "Carlos", "items": [] }
      ]
    }
  },
  methods: {
    customExpandIcon({ expanded, record, onExpand }) {
      // 无展开内容直接返回空节点,不显示图标
      if (record.items.length === 0) return null
      // 有内容渲染和原生一致的展开箭头
      return <a-icon
        type={expanded ? 'caret-down' : 'caret-right'}
        class="ant-table-row-expand-icon"
        onClick={e => onExpand(record, e)}
      />
    }
  }
}
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')

最终效果

  • items为空的行不显示展开箭头,也无法被展开
  • 有子项的行保留原生展开交互和样式,展开位置和你之前配置的一致
  • 不需要额外写CSS隐藏图标,逻辑层直接控制,不会出现样式闪烁问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:33:21