vue3.0手动封装分页组件的方法

首先,我们需要明确什么是分页组件。分页组件是网页或应用中常见的一种翻页工具,可以按照一定的页面数或者数据条数来分割数据,并且实现数据的分页展示。Vue 3.0 是当下最新版本的 Vue 框架,它具有精简、性能优越、使用方便等特点,因此我们选择 Vue 3.0 作为开发分页组件的平台。

手动封装分页组件的过程主要包括以下几个步骤:

  1. 在 Vue 项目中创建一个分页组件
<template>
  <div>
    <ul>
      <li v-if="currentPage > 1" @click="updatePage(currentPage-1)">上一页</li>
      <li v-for="page in pages" :key="page" @click="updatePage(page)" :class="{active: currentPage == page}">{{ page }}</li>
      <li v-if="currentPage < totalPages" @click="updatePage(currentPage+1)">下一页</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 100
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.total / this.pageSize);
    },
    pages() {
      const pages = []
      for (let i = 1; i <= this.totalPages; i++) {
        pages.push(i)
      }
      return pages
    }
  },
  methods: {
    updatePage(page) {
      this.currentPage = page
      this.$emit('page-changed', page)
    }
  }
}
</script>

<style>
.active {
  color: red;
}
</style>

上述代码中,我们创建了一个基本的分页组件,实现了分页功能。在组件中,我们定义了 currentPage(当前页码)、pageSize(每页数据量)、total(数据总量)三个核心属性,并通过计算属性 totalPages 实现了总页数的计算。接着,用一个循环渲染出了表示当前可供选择页码的页码列表 pages,并实现前一页、后一页的功能。最后,我们给当前选中页码设置了样式(通过 class .active 实现)。

  1. 在 Vue 项目页面中使用分页组件
<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item">{{ item }}</li>
    </ul>
    <page :total="total" @page-changed="handlePageChanged"></page>
  </div>
</template>

<script>
import Page from '@/components/Page.vue'

export default {
  components: {
    Page
  },
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 100,
      items: []
    }
  },
  methods: {
    handlePageChanged(page) {
      this.currentPage = page
      this.getItems()
    },
    async getItems() {
      const startIndex = (this.currentPage - 1) * this.pageSize
      this.items = await fetchData(startIndex, this.pageSize)
    }
  }
}
</script>

在页面中,我们引入了刚才创建的分页组件 Page,并传入当前数据的总量(total)。接着,我们在 data 函数中定义当前页码(currentPage)、每页数据量(pageSize)、items(当前展示数据),并在 methods 中实现了 handlePageChanged、getItems 两个方法。handlePageChanged 方法用于处理分页组件的页码变化,getItems 方法用于根据当前页码和每页数据量从后台获取数据。最后,在页面渲染的过程中,我们渲染了一个 ul 列表展示 items,并将分页组件添加到了页面底部。

至此,我们已经完成了手动封装分页组件的过程。在使用分页组件的时候,只需要传入总的数据量,然后在 handlePageChanged 中处理数据即可实现完整的分页功能。同时,我们可以通过改变样式、修改可选页码数量等方式进行进一步的样式美化和功能扩展。

下面我们通过两个示例演示如何使用手动封装的分页组件。

示例1:Vue + ElementUI 实现分页

<template>
  <div>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="address" label="地址"></el-table-column>
    </el-table>
    <page :total="total" @page-changed="handlePageChanged"></page>
  </div>
</template>

<script>
import Page from '@/components/Page.vue'
import { reactive } from 'vue'
import { getTableData } from '@/api'

export default {
  components: {
    Page
  },
  setup() {
    const state = reactive({
      currentPage: 1,
      pageSize: 10,
      total: 0,
      tableData: []
    })

    const handlePageChanged = (page) => {
      state.currentPage = page
      getData()
    }

    const getData = async () => {
      const { data } = await getTableData(state.currentPage, state.pageSize)
      state.tableData = data.list
      state.total = data.total
    }

    onMounted(() => {
      getData()
    })

    return {
      ...toRefs(state),
      handlePageChanged
    }
  }
}
</script>

在示例1中,我们引入了 ElementUI 的表格组件,并通过 getTableData 方法从后台获取数据。在 setup 函数中,我们使用 Vue 3.0 的 Composition API,通过 reactive 函数创建了一个响应式对象 state,其中包含了 currentPage、pageSize、total、tableData 等核心属性。接着,我们使用 onMounted 函数在组件挂载完成后获取数据,并实现了 handlePageChanged 和 getData 两个方法。handlePageChanged 方法用于处理分页组件的页码变化,getData 方法用于根据当前页码和每页数据量从后台获取数据。最后,在渲染界面时,我们将分页组件添加在表格下面。

示例2:Vue + Antd 实现分页

<template>
  <div>
    <a-table :columns="columns" :dataSource="tableData" bordered pagination="@false" />
    <page :total="total" @page-changed="handlePageChanged"></page>
  </div>
</template>

<script>
import Page from '@/components/Page.vue'
import { reactive } from 'vue'
import { getTableData } from '@/api'

export default {
  components: {
    Page
  },
  setup() {
    const state = reactive({
      currentPage: 1,
      pageSize: 10,
      total: 0,
      tableData: []
    })

    const columns = [
      {
        title: '姓名',
        dataIndex: 'name',
        key: 'name'
      },
      {
        title: '年龄',
        dataIndex: 'age',
        key: 'age'
      },
      {
        title: '地址',
        dataIndex: 'address',
        key: 'address'
      }
    ]

    const handlePageChanged = (page) => {
      state.currentPage = page
      getData()
    }

    const getData = async () => {
      const { data } = await getTableData(state.currentPage, state.pageSize)
      state.tableData = data.list
      state.total = data.total
    }

    onMounted(() => {
      getData()
    })

    return {
      ...toRefs(state),
      columns,
      handlePageChanged
    }
  }
}
</script>

在示例2中,我们引入了 Antd 的表格组件,并通过 getTableData 方法从后台获取数据。与示例1中相似的是,我们在 setup 函数中使用了 reactive 函数创建了响应式对象 state,并实现了 handlePageChanged 和 getData 两个方法。区别在于,我们使用了 Antd 的 pagination 属性实现了分页功能,具体方式是将其设置为 false,并使用自定义的分页组件。最后,在渲染界面时,我们将分页组件添加在表格下面。

总结:以上两个示例展示了手动封装分页组件的基本实现方式,并且演示了如何在 Vue 3.0 项目中通过第三方组件库(ElementUI 和 Antd)与后台接口进行集成。通过手动封装分页组件,我们可以根据自己的需求进行样式和功能的定制,同时提高了代码的复用性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3.0手动封装分页组件的方法 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Java 中的 this 和 super 区别

    Java 中的 this 和 super 关键字是面向对象编程非常重要的概念。它们的作用不同,但在一定程度上又有重叠。接下来我将详细讲解它们的区别。 this 关键字 this 关键字代表当前对象,它可以用于: 引用当前类中的成员变量或成员方法。 当构造函数的参数名和成员变量名相同时,用于区分两者,以便正确地初始化成员变量。 将当前对象作为参数传递给其他方法…

    other 2023年6月26日
    00
  • php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法

    原因分析: 在连接到 php版微信支付api.mch.weixin.qq.com 时,可能会出现域名解析慢的问题。这种情况通常出现在网络环境较差的情况下,会导致支付接口请求失败,影响业务的正常运行。造成这种问题的原因有: DNS服务器响应缓慢; 服务器负载高,无法响应请求; 网络带宽不足。 解决方法: 为了解决这个问题,我们可以采取如下措施: 更换DNS服务…

    other 2023年6月27日
    00
  • Java实现规则几何图形的绘制与周长面积计算详解

    Java实现规则几何图形的绘制与周长面积计算详解 本攻略将详细介绍如何使用Java编程语言实现规则几何图形的绘制以及计算其周长和面积。我们将以两个示例说明这个过程。 示例一:绘制矩形 首先,我们需要导入Java的图形库,例如java.awt和javax.swing。然后,我们可以创建一个继承自JFrame的类,用于显示我们的图形。 import java.a…

    other 2023年7月27日
    00
  • Python实现的单向循环链表功能示例

    接下来我将为大家详细讲解Python实现的单向循环链表的功能示例。 单向循环链表的基本概念 单向循环链表是指链表中每个节点都保存了下一个节点的地址信息,最后一个节点的地址信息指向第一个节点,形成了一个循环链表。在单向循环链表中,可以从任何一个节点开始遍历整个链表。 实现单向循环链表的关键操作 单向循环链表主要包括增加节点、删除节点、遍历节点、搜索节点等操作。…

    other 2023年6月27日
    00
  • C++基于CMD命令行实现扫雷小游戏

    C++基于CMD命令行实现扫雷小游戏攻略 简介 扫雷游戏是一款经典的休闲游戏,通过点击格子来找到没有地雷的区域,避免不小心点到地雷的情况。本篇攻略将介绍如何使用C++语言在CMD命令行实现扫雷小游戏。 准备工作 在开始编写代码前,需要做一些准备工作: 确保你已经安装了C++编译器,推荐使用MinGW或Visual Studio Code。 熟悉命令行窗口的操…

    other 2023年6月26日
    00
  • 怎样批量修改文件后缀名(任何文件的扩展名)

    批量修改文件后缀名的攻略 要批量修改文件的后缀名,你可以使用以下步骤: 确定文件路径:首先,确定你要修改后缀名的文件所在的路径。这可以是一个文件夹路径或者一个包含多个文件的文件夹路径。 列出文件:使用文件管理器或者命令行工具列出该路径下的所有文件。这将帮助你获取文件的列表,以便后续操作。 编写脚本:使用脚本语言(如Python、Bash等)编写一个脚本来批量…

    other 2023年8月5日
    00
  • java中hashmap容量的初始化实现

    Java中,HashMap是一种常见的哈希表数据结构,它可以在常数时间内完成元素的插入、查找和删除操作,因此在Java编程中被广泛使用。HashMap的内部实现是通过链表+数组实现的,每个元素被放到数组的某个位置上,如果当前位置的元素数量过多则会形成一个链表。 HashMap的初始化需要两个参数:初始容量(initialCapacity)和负载因子(load…

    other 2023年6月20日
    00
  • update中实现子查询

    以下是关于在update中实现子查询的完整攻略,包括基本介绍、实现步骤、示例说明等内容。 1. 基本介绍 在SQL中,子查询是一种嵌套在其他查询中的查询语句。在update语句中,我们可以使用子查询来更新表中的数据。子查询可以返回一个或多个值,这些值可以用于更新中的数据。在使用子查询时,我们需要注意子查询的语法和使用方法,以便正确实现update中的子查询。…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部