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

yizhihongxing

首先,我们需要明确什么是分页组件。分页组件是网页或应用中常见的一种翻页工具,可以按照一定的页面数或者数据条数来分割数据,并且实现数据的分页展示。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日

相关文章

  • VBS加密14法你会几种 VBS加密免杀浅谈

    VBS加密14法攻略 简介 VBS加密是一种常用的技术,用于隐藏和保护VBS脚本的源代码。在本攻略中,我们将详细讲解VBS加密的14种方法,并提供两个示例说明。 方法1:字符串拼接 这种方法通过将VBS脚本的源代码拆分为多个字符串,并在运行时进行拼接,来隐藏源代码。以下是一个示例: Dim code code = \"MsgBox \"\…

    other 2023年8月18日
    00
  • 从零使用TypeScript开发项目打包发布到npm

    从零使用TypeScript开发项目打包发布到npm的完整攻略 本攻略将详细介绍如何从零开始使用TypeScript开发项目,并将其打包发布到npm。以下是完整的步骤: 步骤1:初始化项目 首先,我们需要创建一个新的项目目录并初始化npm。在命令行中执行以下命令: mkdir my-project cd my-project npm init 按照提示填写项…

    other 2023年8月2日
    00
  • 新手进阶 透彻认识64位操作系统

    新手进阶:透彻认识64位操作系统攻略 介绍 64位操作系统是一种能够处理64位数据的操作系统。相比于32位操作系统,64位操作系统具有更大的内存寻址能力和更高的性能。本攻略将帮助新手透彻认识64位操作系统,并提供两个示例说明。 步骤 1. 了解64位操作系统的基本概念 首先,我们需要了解64位操作系统的基本概念。64位操作系统是指使用64位寻址空间的操作系统…

    other 2023年7月28日
    00
  • ASP.NET递归法求阶乘解决思路

    ASP.NET递归法求阶乘是利用递归的思想实现阶乘计算的方式。下面是ASP.NET递归法求阶乘的完整攻略: 1. 思路 根据阶乘的定义,n的阶乘可以表示为$n!=n(n-1)(n-2)…1$,所以我们可以利用递归的方式计算阶乘。递归的基本思路是,当计算n的阶乘时,如果n等于1,则返回1;否则,递归计算n-1的阶乘,并将结果与n相乘,得到n的阶乘。 2. …

    other 2023年6月27日
    00
  • mariadb卸载

    Mariadb卸载攻略 Mariadb是一个流行的开源关系型数据库管理系统,但有时您可能需要卸载它。以下是在Linux系统上卸载Mariadb的步骤: 1. 停止Mariadb 在卸载Mariadb之前,您需要停止Mariadb服务。您可以使用以下命令停止Mariadb服务: sudo systemctl stop mariadb“` ### 2. 卸载M…

    other 2023年5月6日
    00
  • vscode使用Eslint+Prettier格式化代码的详细操作

    下面是使用VS Code配置ESLint和Prettier的详细攻略: 安装VS Code插件 首先,需要安装VS Code的两个插件ESLint和Prettier。可以使用VS Code内置的插件市场进行安装,也可以在终端中使用npm进行安装。 在VS Code的插件市场搜索并安装ESLint和Prettier插件。 如果你使用终端进行安装,可以使用下面的…

    other 2023年6月20日
    00
  • 深入理解Java 类加载全过程

    关于“深入理解Java类加载全过程”,下面是一份完整攻略,由以下几个部分构成: 背景 Java是一门面向对象的语言,其执行方式和传统的编译型语言有所不同。Java的执行分为编译阶段和运行阶段,其中涉及到Java类的加载、验证、准备、解析、初始化等环节。 类加载全过程 Java类的加载过程分为以下几步: 1. 加载 类加载器首先从CLASSPATH中找到指定类…

    other 2023年6月25日
    00
  • 七猫免费小说怎么查看版本号?七猫免费小说查看版本号技巧

    七猫免费小说查看版本号攻略 七猫免费小说是一款受欢迎的小说阅读应用程序。如果你想查看七猫免费小说的版本号,可以按照以下步骤进行操作: 步骤一:打开七猫免费小说应用 首先,你需要打开七猫免费小说应用程序。你可以在手机的应用列表中找到它,并点击打开。 步骤二:进入设置页面 一旦你打开了七猫免费小说应用,你需要找到设置页面。通常,设置页面可以通过点击应用的主界面右…

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