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日

相关文章

  • pyqt5中动画的使用详解

    PyQt5中动画的使用详解 动画是一种用于改变界面元素的视觉效果的方法之一。在PyQt5中,可以使用QPropertyAnimation、QParallelAnimationGroup、QSequentialAnimationGroup等类来创建动画效果。 QPropertyAnimation QPropertyAnimation是PyQt5中最常用的动画类…

    other 2023年6月27日
    00
  • Educational Codeforces Round 84 (Div. 2)

    “Educational Codeforces Round 84(Div.2)”是Codeforces平台上的一场编程竞赛,本场比赛共有5道题目,难度从A到E不等。以下是本场比赛的完整攻略: 题目列表 本场比赛共有5道题目,分别为: A. Maximum Square B. Balanced Rating Changes C. Tile Painting D…

    other 2023年5月5日
    00
  • Gitblit中采用Ticket模式进行协作开发

    Gitblit中采用Ticket模式进行协作开发的完整攻略 Gitblit是一款基于Git的代码托管和协作开发平台,支持多种协议和多种权限控制方式。其中,Ticket模式是一种常用的协作开发方式,可以帮助团队更好地管理和跟踪任务。本文将为您提供Gitblit中采用Ticket模式进行协作开发的完整攻略,包括环境搭建、Ticket管理、代码提交等方面的内容。 …

    other 2023年5月6日
    00
  • 基于Qt实现SVG图片浏览器

    首先,要实现基于Qt的SVG图片浏览器,需要掌握以下技能: 使用Qt的QSvgWidget和QSvgRenderer进行SVG图片的加载和渲染; 在Qt的MainWindow中创建菜单栏、工具栏和状态栏,实现基本的界面布局; 使用Qt的QFileDialog类进行文件选择和打开; 实现图片缩放和平移的功能。 下面具体介绍实现步骤: 步骤一:新建项目和界面 在…

    other 2023年6月26日
    00
  • Win10准正式版10240自制中文IOS系统镜像下载(32位)

    Win10准正式版10240自制中文IOS系统镜像下载(32位)攻略 简介 本攻略将详细介绍如何下载Win10准正式版10240自制中文IOS系统镜像(32位)。请按照以下步骤进行操作。 步骤一:准备工作 在开始下载之前,请确保您已经完成以下准备工作:1. 确认您的计算机满足Win10准正式版10240的系统要求。2. 确保您的计算机已连接到互联网。 步骤二…

    other 2023年7月28日
    00
  • Day14基础不牢地动山摇-Java基础

    Day14 基础不牢地动山摇-Java基础 在软件开发中,Java作为一门常见的编程语言,其基础知识的掌握对于学习和项目开发都至关重要。本攻略将从以下几个方面介绍Java基础知识的学习路线。 1. 环境配置与开发工具 学习一门编程语言,首先要配置好相应的开发工具和运行环境。Java的环境配置包括JDK、JRE、Eclipse或IntelliJ IDEA等开发…

    other 2023年6月26日
    00
  • Python基础知识之变量的详解

    Python基础知识之变量的详解 在Python中,变量是用来存储数据的容器。它们可以存储各种类型的数据,如整数、浮点数、字符串等。本文将详细介绍Python中变量的定义、赋值、命名规则以及常见的变量操作。 变量的定义和赋值 在Python中,变量的定义和赋值可以在同一行完成。变量的定义使用等号(=)进行赋值操作。例如: x = 10 上述代码将整数值10赋…

    other 2023年8月8日
    00
  • 详谈构造函数加括号与不加括号的区别

    构造函数是一种特殊的函数,用于创建和初始化对象。在JavaScript中,我们可以使用函数或类作为构造函数来创建新的对象。在使用构造函数时,有时会看到在构造函数名称后加上括号,也有时不加,这究竟有什么差别呢?下面我们来详细讲解。 构造函数加括号与不加括号的区别 构造函数加括号的用法 当构造函数名称后面加上括号时,相当于在使用该构造函数来创建新的对象。例如: …

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