利用vue + element实现表格分页和前端搜索的方法


Posted in Javascript onDecember 25, 2017

前言

ElementUI是饿了么前端开源的一个基于Vue的前端框架,已经帮我们封装好了一系列功能性的组件,比如栅格系统、表格、表单、树形菜单、通知等。对于搞后台管理界面的项目,特别是不需要考虑兼容ie8、ie9以下的项目、ElementUI是一个不错的选择。

而且ElementUI的文档写得十分详尽,参照demo可以很快上手。

本文主要介绍了关于vue + element实现表格分页和前端搜索的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

实现思路

1.前端后台管理会存在很多表格,表格数据过多就需要分页;

2.前端交互每次搜索如果都请求服务器会加大服务器的压力,所以在数据量不是很大的情况下可以一次性将数据返回,前端做检索

3.下面贴上一个demo

示例代码

<template>
<div>
 <el-input v-model="tableDataName" placeholder="请输入姓名" style="width:240px"></el-input>
 <el-button type="primary" @click="doFilter">搜索</el-button>
 <el-button type="primary" @click="openData">展示数据</el-button>
 <el-table
 :data="tableDataEnd"
 border
 style="width: 100%">
 <el-table-column
  prop="date"
  label="日期"
  width="180">
 </el-table-column>
 <el-table-column
  prop="name"
  label="姓名"
  width="180">
 </el-table-column>
 <el-table-column
  prop="address"
  label="地址">
 </el-table-column>
 </el-table>
 <el-pagination
  @size-change="handleSizeChange"
  @current-change="handleCurrentChange"
  :current-page="currentPage"
  :page-sizes="[1, 2, 3, 4]"
  :page-size="pageSize"
  layout="total, sizes, prev, pager, next, jumper"
  :total="totalItems">
 </el-pagination>
</div>
</template>
<script>
export default {
 data() {
 return {
  tableDataBegin: [
  {
   date: "2016-05-01",
   name: "王小虎",
   address: "上海市普陀区金沙江路 1518 弄"
  },
  {
   date: "2016-05-02",
   name: "王小虎",
   address: "上海市普陀区金沙江路 1517 弄"
  },
  {
   date: "2016-05-03",
   name: "王二虎",
   address: "上海市普陀区金沙江路 1519 弄"
  },
  {
   date: "2016-05-04",
   name: "王二虎",
   address: "上海市普陀区金沙江路 1516 弄"
  },
  {
   date: "2016-05-05",
   name: "王三虎",
   address: "上海市普陀区金沙江路 1518 弄"
  },
  {
   date: "2016-05-06",
   name: "王三虎",
   address: "上海市普陀区金沙江路 1517 弄"
  },
  {
   date: "2016-05-07",
   name: "王小虎",
   address: "上海市普陀区金沙江路 1519 弄"
  },
  {
   date: "2016-05-08",
   name: "王小虎",
   address: "上海市普陀区金沙江路 1516 弄"
  }
  ],
  tableDataName: "",
  tableDataEnd: [],
  currentPage: 4,
  pageSize: 2,
  totalItems: 0,
  filterTableDataEnd:[],
  flag:false
 };
 },
 created() {
 this.totalItems = this.tableDataBegin.length;
 if (this.totalItems > this.pageSize) {
  for (let index = 0; index < this.pageSize; index++) {
  this.tableDataEnd.push(this.tableDataBegin[index]);
  }
 } else {
  this.tableDataEnd = this.tableDataBegin;
 }
 },
 methods: {
 //前端搜索功能需要区分是否检索,因为对应的字段的索引不同
 //用两个变量接收currentChangePage函数的参数
 doFilter() {
  if (this.tableDataName == "") {
  this.$message.warning("查询条件不能为空!");
  return;
  }
  this.tableDataEnd = []
  //每次手动将数据置空,因为会出现多次点击搜索情况
  this.filterTableDataEnd=[]
  this.tableDataBegin.forEach((value, index) => {
  if(value.name){
   if(value.name.indexOf(this.tableDataName)>=0){
   this.filterTableDataEnd.push(value)
   }
  }
  });
  //页面数据改变重新统计数据数量和当前页
  this.currentPage=1
  this.totalItems=this.filterTableDataEnd.length
  //渲染表格,根据值
  this.currentChangePage(this.filterTableDataEnd)
  //页面初始化数据需要判断是否检索过
  this.flag=true
 },
 openData() {},
 handleSizeChange(val) {
  console.log(`每页 ${val} 条`);
  this.pageSize = val;
  this.handleCurrentChange(this.currentPage);
 },
 handleCurrentChange(val) {
  console.log(`当前页: ${val}`);
  this.currentPage = val;
  //需要判断是否检索
  if(!this.flag){
  this.currentChangePage(this.tableDataEnd)
  }else{
  this.currentChangePage(this.filterTableDataEnd)  
  }
 }, //组件自带监控当前页码
 currentChangePage(list) {
  let from = (this.currentPage - 1) * this.pageSize;
  let to = this.currentPage * this.pageSize;
  this.tableDataEnd = [];
  for (; from < to; from++) {
  if (list[from]) {
   this.tableDataEnd.push(list[from]);
  }
  }
 }
 }
};
</script>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery中常用的SET和GET
Jan 13 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
jquery复选框checkbox实现删除前判断
Apr 20 Javascript
Javascript中的几种URL编码方法比较
Jan 23 Javascript
js实现全国省份城市级联下拉菜单效果代码
Sep 07 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
Vue 2.0 侦听器 watch属性代码详解
Jun 19 Javascript
VueRouter导航守卫用法详解
Dec 25 #Javascript
基于zTree树形菜单的使用实例
Dec 25 #Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 #jQuery
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 #Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 #Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 #jQuery
zTree树形菜单交互选项卡效果的实现方法
Dec 25 #Javascript
You might like
PHP 超链接 抓取实现代码
2009/06/29 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
php构造函数实例讲解
2013/11/13 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
php中动态变量用法实例
2015/06/10 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python构建网页爬虫原理分析
2017/12/19 Python
python如何使用unittest测试接口
2018/04/04 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python两个list[]相加的实现方法
2020/09/23 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
行政管理专业推荐信
2013/11/02 职场文书
化学教师教学反思
2014/01/17 职场文书
留学推荐信怎么写
2014/01/25 职场文书
精彩的广告词
2014/03/19 职场文书
中考标语大全
2014/06/05 职场文书
春节超市活动方案
2014/08/14 职场文书
单位员工收入证明样本
2014/10/09 职场文书
优秀团队申报材料
2014/12/26 职场文书
市场部经理岗位职责
2015/02/02 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang