当前位置:首页 > VUE

vue实现ajax数据分页

2026-01-22 15:06:24VUE

Vue 实现 AJAX 数据分页的方法

使用 axios 发送 AJAX 请求

安装 axios 并导入到 Vue 组件中:

npm install axios

在组件中引入 axios:

import axios from 'axios';

发送分页请求示例:

methods: {
  fetchData(page = 1) {
    axios.get('/api/data', {
      params: {
        page: page,
        per_page: 10
      }
    })
    .then(response => {
      this.items = response.data.data;
      this.total = response.data.total;
    })
    .catch(error => {
      console.error(error);
    });
  }
}

分页组件实现

在模板中添加分页控件:

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">
        {{ item.name }}
      </li>
    </ul>

    <div class="pagination">
      <button 
        @click="fetchData(currentPage - 1)" 
        :disabled="currentPage === 1"
      >
        上一页
      </button>

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

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

计算属性处理分页逻辑

添加计算属性计算总页数:

computed: {
  totalPages() {
    return Math.ceil(this.total / this.perPage);
  }
},
data() {
  return {
    items: [],
    total: 0,
    currentPage: 1,
    perPage: 10
  };
}

服务器端分页处理

Node.js Express 示例:

app.get('/api/data', (req, res) => {
  const page = parseInt(req.query.page) || 1;
  const perPage = parseInt(req.query.per_page) || 10;
  const offset = (page - 1) * perPage;

  // 假设使用 Sequelize
  Model.findAndCountAll({
    limit: perPage,
    offset: offset
  })
  .then(result => {
    res.json({
      data: result.rows,
      total: result.count
    });
  });
});

优化用户体验

添加加载状态提示:

data() {
  return {
    isLoading: false
  };
},
methods: {
  fetchData(page = 1) {
    this.isLoading = true;
    axios.get('/api/data', {
      params: {
        page: page,
        per_page: 10
      }
    })
    .then(response => {
      this.items = response.data.data;
      this.total = response.data.total;
      this.currentPage = page;
    })
    .finally(() => {
      this.isLoading = false;
    });
  }
}

模板中添加加载状态:

<div v-if="isLoading">加载中...</div>

分页参数持久化

使用 Vue Router 保持分页状态:

vue实现ajax数据分页

watch: {
  currentPage(newVal) {
    this.$router.push({
      query: {
        ...this.$route.query,
        page: newVal
      }
    });
  }
},
created() {
  const page = parseInt(this.$route.query.page) || 1;
  this.fetchData(page);
}

标签: 分页数据
分享给朋友:

相关文章

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的基本思想 下拉分页(Infinite Scroll)是一种常见的分页加载方式,当用户滚动到页面底部时自动加载下一页数据。Vue 中可以通过监听滚动事件或使用第三方库实现。 监听滚动事件…

Vue数据依赖实现

Vue数据依赖实现

Vue数据依赖实现原理 Vue的数据依赖实现基于响应式系统,核心是通过Object.defineProperty或Proxy拦截数据变化,结合发布-订阅模式实现依赖收集和更新触发。 核心机制 依赖收…

vue实现数据展示

vue实现数据展示

Vue 数据展示的实现方法 在 Vue 中展示数据通常通过数据绑定、指令和组件等方式实现。以下是几种常见的实现方式: 数据绑定与插值表达式 使用双大括号语法 {{ }} 可以直接在模板中展示数据:…

分页用vue实现

分页用vue实现

实现分页的基本思路 在Vue中实现分页功能,通常需要以下几个核心部分:数据列表、当前页码、每页显示数量、总页数计算、页码切换逻辑。以下是一个完整的实现方案。 分页组件代码示例 <templat…

react如何设置数据

react如何设置数据

设置数据的常见方法 在React中设置数据通常涉及组件的状态管理,可以通过以下几种方式实现: 使用useState Hook(函数组件) import React, { useState…

vue 实现数据分页

vue 实现数据分页

实现数据分页的基本思路 在Vue中实现数据分页通常需要结合前端分页逻辑和后端API支持。前端分页适合数据量较小的情况,后端分页适合大数据量场景。 前端分页实现 创建一个计算属性来分割当前页数据:…