Javascript前端分页

1、适合情形

前端分页一般用于数据量较小的情况,一次请求把数据全部从后端请求回来。

2、前端分页例子

前端分页代码示例

cd front-end-page                   进入front-end-page 文件夹下

npm install                         安装依赖

npm run dev                         运行

3、实现关键

使用计算属性对获取的数据进行处理,即computedfrontEndPageChange方法。el-table中的:data绑定frontEndPageChange

<el-table
  :data="frontEndPageChange"
  stripe
  style="width: 1000px;margin:30px auto;"
  height="550"
>
</el-table>

computed: {
// 计算属性对数据进行处理
frontEndPageChange() {
  let start = (this.paginationOptions.currentPage - 1) * this.paginationOptions.pageSize;
  if (start >= this.tableData.length) start = 0;
  const end = this.paginationOptions.currentPage * this.paginationOptions.pageSize;
  if (end >= this.tableData.length) end = this.tableData.length;
  return this.tableData.slice(start, end);
}

4、vue 文件完整代码

<template>
  <div class="hello">
    {{msg}}
    <div>
      <el-table
        :data="frontEndPageChange"
        stripe
        style="width: 1000px;margin:30px auto;"
        height="550"
      >
        <el-table-column
          prop="date"
          label="日期"
          width="100"
        >
        </el-table-column>
        <el-table-column
          prop="name"
          label="姓名"
          width="100"
        >
        </el-table-column>
        <el-table-column
          prop="address"
          label="地址"
          width="190"
        >
        </el-table-column>

        <el-table-column
          label="个人信息"
          width="180"
          align="center"
        >
          <el-table-column
            prop="age"
            label="年龄"
            align="center"
          >
          </el-table-column>
          <el-table-column
            prop="height"
            label="身高"
            align="center"
          >
          </el-table-column>
        </el-table-column>
      </el-table>
    </div>
    <div>
      <el-pagination
            @size-change="handleSizeChange"
            @current-change="handlePageChange"
            class="z-pagination"
            :current-page="paginationOptions.currentPage"
            :page-size="paginationOptions.pageSize"
            :page-sizes="paginationOptions.pageSizes"
            layout="sizes, prev, pager, next, jumper,total"
            :total="tableData.length">
      </el-pagination>
    </div>
  </div>
</template>

<script>
// 数据来源
import { tableData } from './js/options';
export default {
  name: 'frontEndPage',
  data() {
    return {
      msg: '前端分页',
      paginationOptions: {
        currentPage: 1, // 当前页
        pageSize: 10, // 展示页数
        pageSizes: [10, 20, 30, 40] // 可选择展示页数 数组
      },
      tableData,
    }
  },
  computed: {
    // 计算属性对数据进行处理
    frontEndPageChange() {
      let start = (this.paginationOptions.currentPage - 1) * this.paginationOptions.pageSize;
      if (start >= this.tableData.length) start = 0;
      const end = this.paginationOptions.currentPage * this.paginationOptions.pageSize;
      if (end >= this.tableData.length) end = this.tableData.length;
      return this.tableData.slice(start, end);
    }
  },
  methods: {
    // 改变分页数量
    handleSizeChange(val) {
      this.paginationOptions.pageSize = val;
    },
    // 改变当前页
    handlePageChange(val) {
      this.paginationOptions.currentPage = val;
    }
  }
}
</script>

5、options.js 数据来源文件

/**
 * 表头配置
 */

const tableData = [
  {
    date: "2016-05-02",
    name: "王小虎",
    address: "上海市普陀区金沙江路 1510 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-04",
    name: "李小虎",
    address: "上海市普陀区金沙江路 1511 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-01",
    name: "孙小虎",
    address: "上海市普陀区金沙江路 1512 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-02",
    name: "朱小虎",
    address: "上海市普陀区金沙江路 1513 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-04",
    name: "钱小虎",
    address: "上海市普陀区金沙江路 1514 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-01",
    name: "杜小虎",
    address: "上海市普陀区金沙江路 1515 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-03",
    name: "赵小虎",
    address: "上海市普陀区金沙江路 1516 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-02",
    name: "陈小虎",
    address: "上海市普陀区金沙江路 1510 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-04",
    name: "吴小虎",
    address: "上海市普陀区金沙江路 1511 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-01",
    name: "徐小虎",
    address: "上海市普陀区金沙江路 1512 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-02",
    name: "黄小虎",
    address: "上海市普陀区金沙江路 1513 弄",
    age: 18,
    height: "180cm",
  },
  {
    date: "2016-05-04",
    name: "秦小虎",
    address: "上海市普陀区金沙江路 1514 弄",
    age: 18,
    height: "180cm",
  },
];
export { tableData };

  转载请注明: 24K博客 Javascript前端分页

 上一篇
Table表格合并 Table表格合并
vue+elementUI 中的 Table 表格的合并功能,可配置,使用方便。 1、合并前后效果图 2、代码实现<template> <div class="hello"> {{msg}} <di
下一篇 
ES6之 async 函数 ES6之 async 函数
1、含义 在ES2017标准中引入了async函数,使得一步操作变得更加方便。那么async函数是什么?一句话,它就是Generator函数的语法糖。有一个Generator函数如下,依次读取两个文件。 const fs = require
2019-09-05
  目录