Ant Design Vue list表格组件

1.案例部分代码
 <a-table
          :columns="columns"
          :row-key="record => record.id"
          :data-source="ebooks"
          :pagination="pagination"
          :loading="loading"
          @change="handleTableChange"
      >
        <template #cover="{ text: cover }">
          <img v-if="cover" :src="cover" alt="avatar"/>
        </template>

        <template v-slot:action="{ text, record }">
          <a-space size="small">
            <a-button type="primary">编辑</a-button>
            <a-button type="danger">删除</a-button>
          </a-space>
        </template>
      </a-table>
2. 简述
1.:columns 定义列数
2.row-key  定义key 一般采用id不重复唯一即可
3.data-source 数据来源,为后端返回的数据列表list
4.:pagination 分页标签,请求后端查询携带当前页和每页显示的条数2个参数,后端需要返回总共多少条数total
   ,前端接收到total后,自动实现分页
5.:loading 加载效果,默认不显示,请求后端查询过程中显示加载效果,后端有返回就关闭加载效果。返回分为成功和    失败2种
6.@change="handleTableChange 点击左下角,分页参数,此事件就会监听到,当前是第几页page,每页显示多少条size,这2个参数,然后请求后端查询接口,完成分页效果。

注:关于具体每条显示多少条这里默认是固定的,可以是动态的,例如:页面可以显示当前页可以可显示的条数,传递参数,请求后端效果是一样的。后期可以优化。
3.案例代码
<template>
  <a-layout>
    <a-layout-content
        :style="{ background: '#fff', padding: '24px', margin: 0, minHeight: '280px' }"
    >
      <a-table
          :columns="columns"
          :row-key="record => record.id"
          :data-source="ebooks"
          :pagination="pagination"
          :loading="loading"
          @change="handleTableChange"
      >
        <template #cover="{ text: cover }">
          <img v-if="cover" :src="cover" alt="avatar"/>
        </template>

        <template v-slot:action="{ text, record }">
          <a-space size="small">
            <a-button type="primary">编辑</a-button>
            <a-button type="danger">删除</a-button>
          </a-space>
        </template>
      </a-table>
    </a-layout-content>
  </a-layout>
</template>

<script lang="ts">
import {defineComponent, onMounted, ref} from 'vue'
import axios from 'axios'

export default defineComponent({
  name: 'AdminEbook',
  setup() {
    //定义响应式变量
    const ebooks = ref()
    //定义初始化分页参数
    const pagination = ref({
      //当前页
      current: 1,
      //每页的分页条数
      pageSize: 4,
      total: 0
    })

    //初始化加载效果无
    const loading = ref(false)
    //表格
    const columns = [
      {
        title: '封面',
        dataIndex: 'cover',
        //特殊渲染
        slots: {customRender: 'cover'}
      },
      {
        title: '名称',
        dataIndex: 'name'
      },
      {
        title: '分类',
        dataIndex: 'category'
      },
      {
        title: '文档数',
        dataIndex: 'docCount'
      },
      {
        title: '阅读数',
        dataIndex: 'viewCount'
      },
      {
        title: '点赞数',
        dataIndex: 'voteCount'
      },
      {
        title: 'Action',
        key: 'action',
        slots: {customRender: 'action'}
      }
    ];

    /**
     * 数据查询
     */
    const handleQuery = (params: any) => {
      console.log("当前页:" + params.page);
      console.log("每页的分页条数:" + params.size);
      loading.value = true;
      axios.get("/ebook/list", {
        params: {
          page: params.page,
          size: params.size
        }
      }).then((response) => {
        loading.value = false;
        const data = response.data;
        ebooks.value = data.content.list;

        //  重置分页按钮
        pagination.value.current = params.page;
        //总条数
        pagination.value.total = data.content.total;
        console.log("后端返回查询总条数:" + data.content.total);
      });
    };

    /**
     * 表格点击页码时触发
     */
    const handleTableChange = (pagination: any) => {
      // console.log("当前页:" + pagination.current);
      // console.log("每页的分页条数:" + pagination.pageSize);
      handleQuery({
        page: pagination.current,
        size: pagination.pageSize
      });
    };

    onMounted(() => {
      handleQuery({
        page: 1,
        size: pagination.value.pageSize
      });
    })

    return {
      ebooks,
      pagination,
      loading,
      columns,
      handleTableChange
    }
  }
})
</script>
<style scoped>
img {
  width: 50px;
  height: 50px;
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Ant Design Vue是一个基于Vue.js的UI组件库,提供了丰富的组件和样式,方便开发者构建美观、易用的Web应用程序。在Ant Design Vue中使用表格组件可以通过以下步骤进行: 1. 首先,引入Ant Design Vue的Table组件和相关样式。可以通过npm安装或者直接引入CDN链接来获取Ant Design Vue。 2. 在Vue组件中定义表格的列和数据源。可以使用`columns`属性来描述表格的列,每个列可以设置`dataIndex`、`key`、`title`等属性来定义列的数据和标题。同时,可以使用`scopedSlots`属性来定义自定义渲染的插槽。 3. 在模板中使用`a-table`组件来渲染表格,并将定义的列和数据源传递给`columns`和`data-source`属性。 4. 如果需要在表格中添加自定义的内容或操作按钮,可以使用`template`标签来定义插槽,并使用`slot-scope`属性来获取行信息。在插槽中可以放置任何你想展示的元素,比如按钮、图片等。 下面是一个使用Ant Design Vue表格的示例代码: ```html <template> <a-table :columns="columns" :data-source="data"> <template #name="{ record }"> <a-button type="primary" ghost @click="hide(record)">编辑</a-button> </template> </a-table> </template> <script> export default { data() { return { columns: \[ { dataIndex: "checklistName", key: "checklistName", id: "1", title: this.$t("table.ChecklistName"), width: 150, fixed: "left", scopedSlots: { customRender: "name" }, }, \], data: \[ // 表格数据源 \], }; }, methods: { hide(record) { // 编辑按钮点击事件处理逻辑 }, }, }; </script> ``` 在上述代码中,`columns`数组定义了表格的列,其中`checklistName`列使用了自定义渲染的插槽`name`。`data`数组定义了表格的数据源。在模板中,使用`template`标签定义了名为`name`的插槽,并在插槽中放置了一个编辑按钮。点击编辑按钮会触发`hide`方法。 希望以上信息对您有所帮助。如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* [ant-design vue Table表格使用scopedSlots和customRender](https://blog.csdn.net/weixin_45685313/article/details/125560052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue + Ant Design之table自定义表格、添加操作按钮并获取当前行数据](https://blog.csdn.net/weixin_52691965/article/details/120332102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值