vue+element UI实现分页组件

1.前言

在web页面中,常常需要将后台查询到的数据以表格形式展示出来,而这些数据量往往会非常庞大,如果将所有要展示的数据一次性请求获取并展示到页面上,那页面长度势必会变得非常的长,很不美观。更重要的是,如果数据量过于大,在页面加载时一次性请求全部数据将会耗费大量网络资源,性能极低。但是,如果我们可以将数据分页展示,这样页面首先不会变的冗长,另外只有用户点击页码才会发出请求并且每次请求的数据量也不会很大,这就极大的节省了网络资源,提高了性能。本文就以vue结合element UI实现一个数据分页组件。

2.环境准备

因为我们要实现的分页组件结合了element UI组件库,所以使用前必须安装element UI组件库(安装方式猛戳这里),博主采用的安装方式是按需引入,当然你也可以图省事选择完整引入。

element UI组件库安装完成后,我们还需要安装一下vue-resource插件,因为vue本身没有集成AJAX,所以我们要借助这个插件来发送AJAX请求,当然你也可以选择axios.

import Vue from ‘vue‘
import {Table,TableColumn,Pagination} from ‘element-ui‘;
import VueResource from ‘vue-resource‘
Vue.use(Table);
Vue.use(TableColumn);
Vue.use(Pagination);
Vue.use(VueResource)

3.template模板部分

<template>
  <div class="logTab">
    <h1>操作日志</h1>
    <el-table
      :data="tableData"
      height="550"
      border>
      <el-table-column
        prop="time"
        label="日期"
        width="200"
        align="center"
      >
      </el-table-column>
      <el-table-column
        prop="user_name"
        label="姓名"
        align="center"
        width="150">
      </el-table-column>
      <el-table-column
        prop="log_info"
        label="操作对象"
        align="center"
        width="500">
      </el-table-column>
      <el-table-column
        prop="log_type"
        label="操作类型"
        align="center"
        width="150">
      </el-table-column>
    </el-table>
    <el-col :span="24" class="toolbar pageBar">
      <el-pagination
        @current-change="handleCurrentChange"
        :current-page="currentPage"
        layout=" prev, pager, next,total"
        :total="total"
        background>
      </el-pagination>
    </el-col>
  </div>
</template>

解释:

<el-table-column
        prop="time"
        label="日期"
        width="200"
        align="center"
      >
</el-table-column>

上面代码中用<el-table-column></el-table-column>标签包裹的是表格的表头部分,其中:label=""表示表头要显示的文字,prop=""是后台返回用来填充表格的json数据的key值。后台返回的数据示例参考第五部分。

4.组件逻辑部分

<script>
  import Vue from ‘vue‘
  import {Table,TableColumn,Pagination} from ‘element-ui‘;
  import VueResource from ‘vue-resource‘
  Vue.use(Table);
  Vue.use(TableColumn);
  Vue.use(Pagination);
  Vue.use(VueResource)

  export default {
    name: "Log",
    data() {
      return {
        tableData: [],
        currentPage: 1,      //当前页
        total: 0,          //数据总条数
        pageSize: 10,        //每页显示的数据条数
      }
    },
    methods:{
      //该方法用来从后台拉取数据,以get方式请求
      //例如:默认每页显示10条数据,当用户点击页码1时,向后端请求第0~9条数据
      getData(){
        var start = (this.currentPage-1)*this.pageSize;       //请求的数据从第start条开始
        var end = this.currentPage*this.pageSize-1;              //到第end条结束
        this.$http.get(‘/api/v1/get_data/?start=‘+start+‘&end=‘+end).then(function (response) {
            this.tableData = response.body.logs
        },function (err) {
          console.log(err)
        })
      },
      //该方法当用户点击页码改变时触发,val为切换到的页码,页码变化后向后台请求新的数据
      handleCurrentChange(val) {
        this.currentPage = val;
        this.getData();
      },
    },
    //该方法为组件创建前的钩子函数,主要用来初始化表格,当表格被加载出来即向后台先请求前10条数据
    beforeCreate:function () {
      this.$http.get(‘/api/v1/get_data/?start=0&end=10‘).then(function (response) {
          this.total = response.body.log_total;
          this.tableData = response.body.logs
      },function (err) {
        console.log(err)
      })
    }
  }
</script>

5.后端返回数据示例

要使表格组件能够被正确渲染,后端在收到前端的数据请求后应返回如下格式json数据:

{
    data_total:"",                      //该字段为数据库中数据的总条数
    data_list:[                            //该字段为填充表格的数据,以数组形式返回,数组中每个元素即为表格一行数据
            {
                time:"",                //该字段为表格中的一行数据,需要注意的是:这里的key需要与模板中表头的prop一致
                user_name:"",
                log_info:"",
                log_type:""
            },
            {
                time:"",
                user_name:"",
                log_info:"",
                log_type:""
            },
            {
                time:"",
                user_name:"",
                log_info:"",
                log_type:""
            }
            ...
    ]
}

(完)

原文地址:https://www.cnblogs.com/wangjiachen666/p/9545456.html

时间: 2024-10-19 22:28:49

vue+element UI实现分页组件的相关文章

vue + element ui 阻止表单输入框回车刷新页面

问题 在 vue+element ui 中只有一个输入框(el-input)的情况下,回车会提交表单. 解决方案 在 el-form 上加上 @submit.native.prevent 这个则会阻止表单回车提交. 测试 下面的代码出现表单回车提交 <body> <div id="app"> <el-form ref="form" :model="form" label-width="80px"&

vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、一级mockjs用法、路由懒加载三种方式

不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p>Element UI简单Cascader级联选择器使用</p> <el-cascader :options='options' v-model="selectedOptions" @change="handleChange"> </el-

vue+element UI实现多级导航菜单

1.前言 在某次日常开发中,项目要求页面的导航菜单需要动态加载,即菜单不能在页面上写死,菜单上的数据由后端开发从数据库中获取返回给前端使用,前端拿到数据后再通过解析数据最终将菜单渲染出来.由于菜单有可能是多级的,所以我们需要使用递归的方式,一层一层的递归数据,将多级菜单完整显示出来.本篇博文借助element UI组件库中的Navmenu导航菜单组件,将其进行改造后封装成一个多级导航菜单组件. 2.工作流程 组件封装好之后,由父组件调用该组件,父组件先向后端发送请求获取菜单数据,然后将菜单数据传

基于Vue.js的表格分页组件

BootPage组件简介 其实也不是啥高大上的组件了,相反确实一个简单的表格分页组件而已,主要是自己最近项目中需要一个表格分页组件,而Vue官方组件库里分页组件都功能太强大或者没有适合我的,所以就自己写了一个凑合着用,或许有人和我一样需要这样一个简单的分页组件来实现简单的分页功能,我便在这里分享一下,大家自觉填坑咯. 如需高大上的组件,可以移步Vue官方组件库:https://github.com/vuejs/awesome-vue#libraries--plugins BootPage是一款支

在使用element ui时 select组件获取label问题

最近在工作的时候需要实现多个条件联合查询,这个其实就是一条sql语句.但是,我们数据库中存储的是根据前端传来id的值所对应的值,而不是直接存的id,使用select组件时,却只能取到value值,无法作为后台查询的条件. 我们需要的是select 组件的label值,而不是看不见的value值. 首先,根据element ui select组件使用手册,给组件添加'change'方法 1 @change=changeValue 再根据Array 的 find方法找出对应的值即可. 1 chang

Vue.js的表格分页组件

转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋可以移步我的上一篇文章<浅谈Vue.js>了解一下. BootPage组件简介 其实也不是啥高大上的组件了,相反确实一个简单的表格分页组件而已,主要是自己最近项目中需要一个表格分页组件,而Vue官方组件

基于Vue的简单通用分页组件

分页组件是每一个系统里必不可少的一个组件,分页组件分为两部分.第一部分是模版部分,用于显示当前分页组件的状态,例如正在获取数据.没有数据.没有下一页等等:第二部分是分页数据对象,用于封装一个分页组件的属性和方法,例如获取数据的 url.当前第几页(page).每次加载条数(count).一共有多少页(totalPage)等等,方法可能会有上一页.下一页.处理数据等等. 分页数据对象 import base from '@/api/base' export default class Pagina

Vue+element UI实现“回到顶部”按钮组件

介绍 这是一个可以快速回到页面顶部的组件,当用户浏览到页面底部的时候,通过点击按钮,可快速回到页面顶部. 使用方法 由于该组件是基于element-UI进行二次封装的,所以在使用该组件时请务必安装element-UI(安装方式猛戳这里),安装好element-UI后,只需将该组件文件夹BackToTop导入到现有项目中即可使用. 使用示例 <template> <div id="app"> <!--可自定义按钮的样式.show/hide临界点.返回的位置

vue+element ui table组件封装,使用render渲染

后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-table-column></el-table-column>, 维护起来相当麻烦,就想到了使用render渲染. 组件内部封装代码: <template> <el-table :data="tableData" size="medium"