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

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

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('lo…

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式,以下是几种常见的方法: 使用内置指令 Vue提供了一些内置指令用于简单的数据校验,例如v-model结合v-bind可以实现基本的…

vue数据代理底层实现

vue数据代理底层实现

Vue 数据代理的底层实现原理 Vue 的数据代理是通过 Object.defineProperty 或 Proxy(Vue 3)实现的,将数据对象的属性代理到 Vue 实例上,使得可以直接通过 th…

vue实现下拉分页思想

vue实现下拉分页思想

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

vue实现数据结构图

vue实现数据结构图

Vue 实现数据结构图的方法 使用第三方库 Vue 可以与多种图表库结合使用,例如 D3.js、ECharts 或 Vis.js。这些库提供了强大的图形渲染能力,适合展示复杂的数据结构图。 安装 E…

分页实现vue

分页实现vue

分页实现方法(Vue) 使用Element UI分页组件 安装Element UI库后,可以直接使用其分页组件。在模板中添加el-pagination,通过v-model绑定当前页码,设置page-s…