当前位置:首页 > 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);
    });
  }
}

分页组件实现

在模板中添加分页控件:

vue实现ajax数据分页

<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 示例:

vue实现ajax数据分页

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 保持分页状态:

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 elementui实现分页

vue elementui实现分页

使用 Element UI 实现 Vue 分页功能 Element UI 提供了 el-pagination 组件,可以方便地实现分页功能。以下是具体实现步骤: 安装 Element UI 确保项目…

vue实现选项卡分页

vue实现选项卡分页

实现选项卡分页的基本思路 在Vue中实现选项卡分页功能,可以通过动态组件或条件渲染结合数据绑定完成。核心逻辑是维护一个当前激活的选项卡状态,根据用户点击切换内容。 使用v-if条件渲染 通过v-if…

Vue数据依赖实现

Vue数据依赖实现

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

react如何筛选数据

react如何筛选数据

筛选数据的方法 在React中筛选数据通常涉及对数组的操作,结合状态管理和渲染逻辑。以下是几种常见的实现方式: 使用数组的filter方法 通过JavaScript数组的filter方法筛选数据,并…

react如何设置数据

react如何设置数据

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

react如何实现分页

react如何实现分页

实现分页的基本思路 在React中实现分页通常需要以下几个核心步骤:管理当前页码状态、计算分页数据、渲染分页控件。以下是一个典型的分页实现方法。 管理分页状态 使用React的useState钩子来…