ruoyi+vue2的前端Demo(不分页、前端分页、后端分页)

目录

  • 前言
  • [1. 不分页](#1. 不分页)
  • [2. 前端分页](#2. 前端分页)
  • [3. 后端分页](#3. 后端分页)

前言

Java基本知识:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

本文主要是通过实战中进行总结!

主要的分页是基于ruoyi这一套去阐述

html 复制代码
<pagination
  v-show="total > 0"
  :total="total"
  :page.sync="pageNum"
  :limit.sync="pageSize"
  @pagination="handlePageChange"
/>

1. 不分页

对应将所有数据都给丢给一个数组,后续一一遍历

html 复制代码
<template>
  <div class="app-container">
    <el-card>
      <h3>Demo 1:不分页(一次性加载所有数据)</h3>

      <el-table
        :data="tableData"
        border
        stripe
        size="mini"
      >
        <el-table-column prop="id" label="ID" width="80" />
        <el-table-column prop="name" label="名称" />
        <el-table-column prop="age" label="年龄" />
      </el-table>
    </el-card>
  </div>
</template>

<script>
export default {
  name: "NoPaginationDemo",
  data() {
    return {
      tableData: []
    };
  },
  created() {
    // 模拟后端一次性返回所有数据
    this.tableData = Array.from({ length: 20 }).map((_, i) => ({
      id: i + 1,
      name: "用户-" + (i + 1),
      age: 20 + (i % 10)
    }));
  }
};
</script>

2. 前端分页

最主要的区别在于 ,后端拿到所有数据,前端点击第二页的时候不是触发后端的请求,而是将下一页在前端进行切割!

html 复制代码
<template>
  <div class="app-container">
    <el-card>
      <h3>Demo 2:前端分页(数据只请求一次)</h3>

      <el-table
        :data="pageData"
        border
        stripe
        size="mini"
      >
        <el-table-column prop="id" label="ID" width="80" />
        <el-table-column prop="name" label="名称" />
        <el-table-column prop="age" label="年龄" />
      </el-table>

      <pagination
        v-show="total > 0"
        :total="total"
        :page.sync="pageNum"
        :limit.sync="pageSize"
        @pagination="handlePageChange"
      />
    </el-card>
  </div>
</template>

<script>
export default {
  name: "FrontendPaginationDemo",
  data() {
    return {
      allData: [],   // 后端返回的全部数据
      pageData: [],  // 当前页数据
      total: 0,
      pageNum: 1,
      pageSize: 5
    };
  },
  created() {
    // 模拟后端一次性返回
    this.allData = Array.from({ length: 23 }).map((_, i) => ({
      id: i + 1,
      name: "用户-" + (i + 1),
      age: 18 + (i % 15)
    }));
    this.total = this.allData.length;
    this.refreshPage();
  },
  methods: {
    refreshPage() {
      const start = (this.pageNum - 1) * this.pageSize;
      const end = start + this.pageSize;
      this.pageData = this.allData.slice(start, end);
    },
    handlePageChange() {
      this.refreshPage();
    }
  }
};
</script>

3. 后端分页

知道分多少页,对应每一页都是请求后端拿到数据!

html 复制代码
<template>
  <div class="app-container">
    <el-card>
      <h3>Demo 3:后端分页(每次翻页请求接口)</h3>

      <el-table
        :data="tableData"
        border
        stripe
        size="mini"
        v-loading="loading"
      >
        <el-table-column prop="id" label="ID" width="80" />
        <el-table-column prop="name" label="名称" />
        <el-table-column prop="age" label="年龄" />
      </el-table>

      <pagination
        v-show="total > 0"
        :total="total"
        :page.sync="queryParams.pageNum"
        :limit.sync="queryParams.pageSize"
        @pagination="getList"
      />
    </el-card>
  </div>
</template>

<script>
export default {
  name: "BackendPaginationDemo",
  data() {
    return {
      loading: false,
      tableData: [],
      total: 0,
      queryParams: {
        pageNum: 1,
        pageSize: 5
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    getList() {
      this.loading = true;

      // ===== 模拟后端分页 =====
      const allData = Array.from({ length: 42 }).map((_, i) => ({
        id: i + 1,
        name: "用户-" + (i + 1),
        age: 20 + (i % 10)
      }));

      const { pageNum, pageSize } = this.queryParams;
      const start = (pageNum - 1) * pageSize;
      const end = start + pageSize;

      setTimeout(() => {
        this.tableData = allData.slice(start, end);
        this.total = allData.length;
        this.loading = false;
      }, 300);
    }
  }
};
</script>
相关推荐
代码匠心8 小时前
AI 自动编程:一句话设计高颜值博客
前端·ai·ai编程·claude
_AaronWong9 小时前
Electron 实现仿豆包划词取词功能:从 AI 生成到落地踩坑记
前端·javascript·vue.js
cxxcode9 小时前
I/O 多路复用:从浏览器到 Linux 内核
前端
用户5433081441949 小时前
AI 时代,前端逆向的门槛已经低到离谱 — 以 Upwork 为例
前端
JarvanMo9 小时前
Flutter 版本的 material_ui 已经上架 pub.dev 啦!快来抢先体验吧。
前端
恋猫de小郭10 小时前
AI 可以让 WIFI 实现监控室内人体位置和姿态,无需摄像头?
前端·人工智能·ai编程
哀木10 小时前
给自己整一个 claude code,解锁编程新姿势
前端
程序员鱼皮10 小时前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
UrbanJazzerati10 小时前
Vue3 父子组件通信完全指南
前端·面试
是一碗螺丝粉10 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain