利用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 相关文章推荐
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
JavaScript实现控制打开文件另存为对话框的方法
Apr 17 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
前端跨域的几种解决方式总结(推荐)
Aug 16 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
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/05/11 PHP
解析php中memcache的应用
2013/06/18 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
php生成无限栏目树
2017/03/16 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Django自定义分页效果
2017/06/27 Python
Python实现调度算法代码详解
2017/12/01 Python
pandas对指定列进行填充的方法
2018/04/11 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python3实现飞机大战游戏
2020/04/24 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
html5绘制时钟动画
2014/12/15 HTML / CSS
精通CAD能手自荐书
2014/01/31 职场文书
初中生期末评语大全
2014/04/24 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
英语感谢信范文
2015/01/20 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
个人学习总结范文
2015/02/15 职场文书