ant design of vue之a-table组件自定义展开/收起功能

ant design of vue之a-table组件自定义展开/收起功能

目标实现:

在这里插入图片描述

1.展开按钮固定于表格最右端
2.展开子表格同时关闭其他展开项
3.自定义展开按钮内容(初始化的是加号)

html

 <a-table ref="table" :columns="columns" :data-source="dataSource" class="components-table-demo-nested"
        :expandIconColumnIndex="6"
         :expandIconAsCell="false" 
         :expandIcon="expandIcon"
        :expanded-row-keys.sync="expandedRowKeys">
        <template #operation>
          <!-- <a>Publish</a> -->
        </template>
        <template #expandedRowRender>
          <a-table :columns="innerColumns" :data-source="innerData" :pagination="false">
          </a-table>
        </template>
      </a-table>

javascript

<script>
const columns =
  [{
    title: '名称',
    dataIndex: 'name',
    align: 'center',

  },
  {
    title: '平台',
    dataIndex: 'platform',
    align: 'center',

  }, {
    title: '更新数',
    dataIndex: 'upgradeNum',
    align: 'center',

  }, {
    title: '版本',
    dataIndex: 'version',
    align: 'center',

  }, {
    title: '创建者',
    dataIndex: 'creator',
    align: 'center',

  }, {
    title: '创建时间',
    dataIndex: 'createdAt',
    align: 'center',

  },
  {
    title: '操作',
    dataIndex: 'operation',
    width: 80,
    align: 'center',
  }]
  //模拟数据
const data = [
  {
    key: 0,
    name: "Screem",
    platform: "iOS",
    arr: [1, 2, 3],
    upgradeNum: 500,
    version: "10.3.4.5654",
    creator: "Jack",
    createdAt: "2014-12-24 23:12:00",
  },
  {
    key: 1,
    name: "Screem",
    platform: "iOS",
    version: "10.3.4.5654",
    upgradeNum: 500,
    arr: [1, 2, 3],
    creator: "Jack",
    createdAt: "2014-12-24 23:12:00",
  },
  {
    key: 2,
    name: "Screem",
    platform: "iOS",
    version: "10.3.4.5654",
     upgradeNum: 500,
    arr: [],
    creator: "Jack",
    createdAt: "2014-12-24 23:12:00",
  },
];

const innerColumns = [{
    title: '名称',
    dataIndex: 'name',
    align: 'center',

  },
  {
    title: '平台',
    dataIndex: 'platform',
    align: 'center',

  }, {
    title: '更新数',
    dataIndex: 'upgradeNum',
    align: 'center',

  }, {
    title: '版本',
    dataIndex: 'version',
    align: 'center',

  }, {
    title: '创建者',
    dataIndex: 'creator',
    align: 'center',

  }, {
    title: '创建时间',
    dataIndex: 'createdAt',
    align: 'center',

  },
];

const innerData = [];
for (let i = 0; i < 3; ++i) {
  innerData.push({
    key: i,
    date: "2014-12-24 23:12:00",
    name: "This is production name",
    upgradeNum: "Upgraded: 56",
  });
}

export default {
  name: 'Area',
  data() {
    return {
      data,
      columns,
      innerColumns,
      innerData,
      expandedRowKeys: [],
      dataSource: [],
      loading: false,
    
    };
  },
  methods: {
    // 渲染打开子表格图标样式
    expandIcon(props) {
      var that = this
      //props.record的内容是表格单行的所有数据,可以在这里判定子表格是否有数据。
      if (props.expanded) {
        //props.expanded的值是true或false,代表子表格是否展开
        //有数据展开时图标样式
        return (
          <a
            onClick={(e) => {
              props.onExpand(props.record, e);
            }}
          >
            收起
          </a>
        );
      } else {
        //有数据且未展开时图标样式
        return (
          <a
            onClick={(e) => {
              props.onExpand(props.record, e);
              //这里用来收起其他已展开的数据
              let key = that.expandedRowKeys.pop()
              that.expandedRowKeys = []
              that.expandedRowKeys.push(key)
            }}
          >
            展开
          </a>
        );
      }
    

};
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 antd-vue 的 a-table 组件中使用上下键选择行,您需要编写一些 JavaScript 代码来实现这个功能。您可以使用 `keydown` 事件来监听键盘事件,并根据按下的键来执行相应的操作。以下是一个可以实现上下键选择行的示例代码: ```vue <template> <a-table :columns="columns" :data-source="data" @row-click="handleRowClick" :row-class-name="rowClassName" /> </template> <script> export default { data() { return { selectedRow: null, data: [ { id: 1, name: 'John Doe' }, { id: 2, name: 'Jane Smith' }, { id: 3, name: 'Bob Johnson' }, ], columns: [ { title: 'ID', dataIndex: 'id', }, { title: 'Name', dataIndex: 'name', }, ], }; }, methods: { handleKeyDown(event) { if (event.keyCode === 38) { // up arrow key if (this.selectedRow === null) { this.selectedRow = this.data[this.data.length - 1]; } else { const index = this.data.indexOf(this.selectedRow); this.selectedRow = this.data[index === 0 ? this.data.length - 1 : index - 1]; } } else if (event.keyCode === 40) { // down arrow key if (this.selectedRow === null) { this.selectedRow = this.data[0]; } else { const index = this.data.indexOf(this.selectedRow); this.selectedRow = this.data[(index + 1) % this.data.length]; } } }, handleRowClick(row) { this.selectedRow = row; }, rowClassName(row) { return row === this.selectedRow ? 'selected-row' : ''; }, }, mounted() { window.addEventListener('keydown', this.handleKeyDown); }, beforeDestroy() { window.removeEventListener('keydown', this.handleKeyDown); }, }; </script> <style scoped> .selected-row { background-color: #e6f7ff; } </style> ``` 在这个示例中,我们使用 `selectedRow` 变量来跟踪当前选中的行。当用户按下上下箭头键时,我们会根据当前选中的行来更新 `selectedRow` 变量。我们还在表格的 `@row-click` 事件中处理用户单击行的情况,以更新 `selectedRow` 变量。最后,我们使用 `rowClassName` 属性来为选中的行添加一个特殊的 CSS 类,以便用户可以看到它被选中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值