利用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 相关文章推荐
点击进行复制的JS代码实例
Aug 23 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 Javascript
判断JS对象是否拥有某种属性的两种方式
Dec 02 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
Jan 05 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
微信小程序 template模板详解及实例代码
Mar 09 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
javascript实现用户必须勾选协议实例讲解
Mar 24 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
js切换光标示例代码
2013/10/10 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python3.0 字典key排序
2008/12/24 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
四年大学自我鉴定
2014/02/17 职场文书
高考寄语大全
2014/04/08 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
接待员岗位职责
2015/02/13 职场文书
个人求职意向书
2015/05/11 职场文书
合作合同协议书
2016/03/21 职场文书