vue3 antdesign表格自定义分页器

本文详细介绍了如何在Vue3项目中结合AntDesign库,自定义实现功能丰富的表格分页器。通过深入理解Vue3的 Composition API 和AntDesign的Table组件,我们可以定制分页样式和交互,提升用户体验。
部署运行你感兴趣的模型镜像

在这里插入图片描述

<template>
  <a-table :columns="columns" :data-source="dataSource" bordered :pagination="pagination" @change="handleTableChange">
    <template #bodyCell="{ column, text, record }">
      <template v-if="['name', 'age', 'address'].includes(column.dataIndex)">
        <div>
          <a-input v-if="editableData[record.key]" v-model:value="editableData[record.key][column.dataIndex]"
            style="margin: -5px 0" />
          <template v-else>
            {{ text }}
          </template>
        </div>
      </template>
      <template v-else-if="column.dataIndex === 'operation'">
        <div class="editable-row-operations">
          <span v-if="editableData[record.key]">
            <a-typography-link @click="save(record.key)">Save</a-typography-link>
            <a-popconfirm title="Sure to cancel?" @confirm="cancel(record.key)">
              <a>Cancel</a>
            </a-popconfirm>
          </span>
          <span v-else>
            <a @click="edit(record.key)">Edit</a>
          </span>
        </div>
      </template>
    </template>
  </a-table>
</template>
<script>
import { cloneDeep } from 'lodash-es';
import { defineComponent, reactive, ref } from 'vue';
const columns = [{
  title: 'name',
  dataIndex: 'name',
  width: '25%',
}, {
  title: 'age',
  dataIndex: 'age',
  width: '15%',
}, {
  title: 'address',
  dataIndex: 'address',
  width: '40%',
}, {
  title: 'operation',
  dataIndex: 'operation',
}];
const data = [];
for (let i = 0; i < 100; i++) {
  data.push({
    key: i.toString(),
    name: `Edrward ${i}`,
    age: 32,
    address: `London Park no. ${i}`,
  });
}
export default defineComponent({
  setup() {
    const pageSize = ref(10);
    const current = ref(1);
    const dataSource = ref(data);
    const pagination = {
      current: current.value,
      pageSize: pageSize.value,
      defaultPageSize: 10,
      // showTotal:  `共 ${dataSource.length} 条数据`,
      showSizeChanger: true, // 可以改变每页个数
      pageSizeOptions: ["5", "10", "20", "30"],
      onShowSizeChange: (current, pageSize) => pagination.pageSize = pageSize,
    }
    const handleTableChange = (pag, filters, sorter) => {
      pagination.current = pag.current;
      pagination.pageSize = pag.pageSize;
    };
    const editableData = reactive({});
    const edit = key => {
      editableData[key] = cloneDeep(dataSource.value.filter(item => key === item.key)[0]);
    };
    const save = key => {
      Object.assign(dataSource.value.filter(item => key === item.key)[0], editableData[key]);
      delete editableData[key];
    };
    const cancel = key => {
      delete editableData[key];
    };
    return {
      dataSource,
      columns,
      editingKey: '',
      editableData,
      edit,
      save,
      cancel,
      pagination,
      handleTableChange
    };
  },
});
</script>
<style scoped>
.editable-row-operations a {
  margin-right: 8px;
}
</style>

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 关于 Ant-Design-Vue 表格组件中的分页器 在 Ant-Design-Vue 中,表格组件 `<a-table>` 支持内置的分页功能。默认情况下,当数据量较大时会自动启用分页显示。可以通过设置属性来控制分页行为。 #### 基本配置 要开启并配置分页器,在初始化表格时通过 `:pagination` 属性传递对象参数: ```javascript const paginationConfig = { defaultPageSize: 10, showQuickJumper: true, total: data.length, onChange: (page, pageSize) => console.log(page, pageSize), }; ``` 此代码片段展示了如何创建一个简单的分页配置对象[^1]。 #### 自定义分页事件处理 对于更复杂的场景,可以监听分页变化事件,并执行相应的业务逻辑: ```javascript <a-table :columns="columns" :data-source="dataSource" :pagination="{ ...paginationConfig, onShowSizeChange: (current, pageSize) => this.pageSize = pageSize }"> </a-table> ``` 上述示例演示了如何绑定 `onShowSizeChange` 方法以响应每页条目数的变化[^4]。 #### 移除分页器 如果不需要使用分页,则可以直接禁用它: ```html <a-table :columns="columns" :data-source="dataSource" :pagination="false"> </a-table> ``` 这段 HTML 片段说明了怎样简单地关闭分页功能[^3]。 #### 动态调整分页状态 有时可能希望根据某些条件动态切换是否显示分页栏。这可以通过 Vue 的计算属性或者 watch 来实现: ```javascript computed: { tablePagination() { return this.showPagination ? { ...defaultPaginationOptions } : false; } } ``` 这里展示了一个基于布尔变量决定是否应用分页配置的方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值