当前位置:首页 > VUE

vue router实现分页

2026-03-28 04:49:08VUE

使用 Vue Router 实现分页功能

在 Vue.js 项目中,可以通过 Vue Router 结合动态路由和查询参数来实现分页功能。以下是具体实现方法:

配置动态路由

router/index.js 中配置动态路由参数 page,用于捕获当前页码:

vue router实现分页

const routes = [
  {
    path: '/list/:page?',
    name: 'List',
    component: () => import('../views/List.vue'),
    props: true
  }
]

组件内处理分页逻辑

在列表组件中,通过 watch 监听路由参数变化,并加载对应页码的数据:

export default {
  props: ['page'],
  data() {
    return {
      currentPage: 1,
      items: [],
      totalPages: 0
    }
  },
  watch: {
    page: {
      immediate: true,
      handler(newPage) {
        this.currentPage = newPage ? parseInt(newPage) : 1
        this.fetchData()
      }
    }
  },
  methods: {
    fetchData() {
      // 模拟API请求
      const mockData = {
        data: [...], // 当前页数据
        total: 100   // 总数据量
      }

      this.items = mockData.data
      this.totalPages = Math.ceil(mockData.total / 10)
    },
    changePage(newPage) {
      if (newPage > 0 && newPage <= this.totalPages) {
        this.$router.push(`/list/${newPage}`)
      }
    }
  }
}

模板中的分页控件

在模板中添加分页导航,使用 router-link 或编程式导航:

vue router实现分页

<template>
  <div>
    <!-- 列表内容 -->
    <div v-for="item in items" :key="item.id">
      {{ item.name }}
    </div>

    <!-- 分页控件 -->
    <div class="pagination">
      <button 
        @click="changePage(currentPage - 1)"
        :disabled="currentPage === 1"
      >
        上一页
      </button>

      <span>第 {{ currentPage }} 页 / 共 {{ totalPages }} 页</span>

      <button 
        @click="changePage(currentPage + 1)"
        :disabled="currentPage === totalPages"
      >
        下一页
      </button>
    </div>
  </div>
</template>

使用查询参数替代动态路由

如果需要更灵活的分页方案,可以使用查询参数:

// 路由配置
{
  path: '/list',
  name: 'List',
  component: () => import('../views/List.vue')
}

// 组件内导航方法
changePage(newPage) {
  this.$router.push({
    path: '/list',
    query: { page: newPage }
  })
}

// 获取当前页
this.currentPage = parseInt(this.$route.query.page) || 1

处理初始页面加载

created 生命周期中处理初始页面加载:

created() {
  if (!this.page && this.$route.params.page) {
    this.currentPage = parseInt(this.$route.params.page)
  }
  this.fetchData()
}

这种方法实现了基于 Vue Router 的分页功能,保持了 URL 与页面状态的同步,支持浏览器前进/后退导航,并可以通过直接输入URL访问特定页码。

标签: 分页vue
分享给朋友:

相关文章

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</p&…

vue实现登录拦截

vue实现登录拦截

实现登录拦截的方法 在Vue项目中,可以通过路由守卫(Navigation Guards)实现登录拦截,确保未登录用户无法访问受保护的路由。以下是具体实现方式: 使用全局前置守卫 在路由配置文件中(…