0


Vue2 + Element UI 实现分页搜索功能

准备工作

1.先创建一个 vue 项目 ,要安装 axios ,并引入项目中,来实现表格数据的获取。
2.表格的数据可以通过在线的 **_接口调试管理软件 _**,来模拟数据库的数据,进行前端的测试。

这里我用到的是在线的 Apifox 工具,可以在里面创建一个新接口
image.png

在左下角点击 文档模式
image.pngimage.png
如果想要生成的文档是自己预期的数据,那么就需要点击 新建期望
image.png
在这个自动生成的数据中 也是可以进行修改的
image.png
最后生成的文档,可以点击这个链接,直接赋值后到浏览器粘贴显示查看
image.png

页面效果展示

模糊搜索,点击搜索或者按 enter 键可以搜索出结果
点击分页显示不同界面
1.gif

具体实现

视图由两部分构成:上面是搜索区,下面是表格展示区。
image.png

1.先构建页面,利用 Element UI,进行页面的设计。
2.完成具体功能的实现。
表格展示区:

1).使用Element 的表格组件 el-table、el-table-column 等构建表格。
列表分页显示是使用了 element-ui 中 el-table 和 el-pagination 标签
2).el-table中data是需要在表格中展示的数据。
3).分页条使用的属性说明:
layout: 组件布局,子组件名用逗号分隔,取值类型为 string。子组件名可以按照需求调换顺序,并用逗号分隔。
total: 显示页码总条数。和 page-count 设置任意一个即可达到显示页码的功能。
page-sizes: 每页显示个数选择器的选项设置。取值类型为 number 数组。
page-size: 每页显示条目数,支持 .sync 修饰符。取值类型为 number,默认值为10。
current-page: 当前页数,支持 .sync 修饰符。取值类型为 number,默认值为1。
分页事件说明:
size-change: 侦听 pageSize 的改变。
current-change: 侦听 currentPage 的改变。
image.png

核心的实现代码

image.png
image.png
currentChangePage : 是用来展示每次切换时当前页面数据及条数。
搜索区的方法:
image.png
searchput: 点击 搜索 ,或是按 enter 键 image.png,都表示要搜索信息,表格中仅显示满足条件的数据。

完整代码展示:

  1. <template>
  2. <div id="app">
  3. <div>
  4. <!-- 设计搜索区 -->
  5. <el-row>
  6. <!-- 是Element UI布局中的核心组件,他的作用的将一行分成24个网格 -->
  7. <el-col :span="6">
  8. <!-- 有个input输入框,后面有搜索按钮,但是正常会习惯性的按回车键(enter键)进行搜索 -->
  9. <el-input v-model="inputContent" class="searchinput" placeholder="输入姓名搜索" @change="searchput" clearable>
  10. </el-input>
  11. </el-col>
  12. <el-col :span="2">
  13. <el-button @click="searchput" type="success">搜索</el-button>
  14. </el-col>
  15. </el-row>
  16. <!-- 设计表格展示区 -->
  17. <el-table stripe :data="tempData" style="width: 100%">
  18. <el-table-column prop="name" label="姓名" width="400">
  19. </el-table-column>
  20. <el-table-column prop="age" label="年龄" width="400">
  21. </el-table-column>
  22. <el-table-column prop="classNo" label="班级">
  23. </el-table-column>
  24. </el-table>
  25. <br />
  26. <!-- 分页条 -->
  27. <el-pagination background layout="total,sizes,prev, pager, next,jumper"
  28. :total="total"
  29. @size-change="handleSizeChange"
  30. @current-change="handleCurrentChange"
  31. :page-sizes="[1, 2, 5, 10]"
  32. :page-size="pageSize" :current-page="currentPage">
  33. </el-pagination>
  34. </div>
  35. </div>
  36. </template>
  1. <script>
  2. import axios from 'axios'
  3. export default {
  4. name: "App",
  5. data() {
  6. return {
  7. tableData: [], //表格源数据
  8. tempData: [], //表格显示数据
  9. currentPage: 1, //当前页
  10. total: 0, //数据总数
  11. pageSize: 10, //一页展示的条数 默认一页展示10条,有很多数据就可以写其他的数
  12. inputContent: '' //搜索的数据值
  13. }
  14. },
  15. methods: {
  16. //每页条数切换
  17. handleSizeChange(val) {
  18. console.log(`每页 ${val} 条`);
  19. this.pageSize = val;
  20. // this.handleCurrentChange(this.currentPage);
  21. this.handleCurrentChange(1);
  22. },
  23. //页码切换
  24. handleCurrentChange(val) {
  25. console.log(`当前页: ${val}`);
  26. this.currentPage = val;
  27. this.currentChangePage(this.tableData, val);
  28. },
  29. //分页方法
  30. currentChangePage(list, currentPage) {
  31. let from = (currentPage - 1) * this.pageSize;
  32. let to = currentPage * this.pageSize;
  33. this.tempData = []; //每次要置空
  34. for (; from < to; from++) {
  35. if(list[from]!=null){ //只有当list的内容不为空的时候才插入,不然会显示空行
  36. this.tempData.push(list[from]);
  37. }
  38. }
  39. console.log(this.tempData);
  40. },
  41. searchput() {
  42. this.tempData = []; //每次要置空
  43. this.tempData = this.tableData.filter((item,index) => {
  44. return (item.name.includes(this.inputContent))
  45. })
  46. console.log(this.tempData);
  47. }
  48. },
  49. mounted() { //自动加载数据,挂在完成 钩子函数created也可以
  50. //发送异步请求,获取数据
  51. axios.get("https://mock.apifox.cn/m1/3361937-0-default/data/info")
  52. .then((result) => { //代表成功获取的信息
  53. this.tableData = result.data;
  54. this.tempData = result.data;
  55. this.total = result.data.length;
  56. // this.pageSize = result.data.length; //检测显示数据的长度是一页要展示的条数
  57. this.handleCurrentChange(1);
  58. })
  59. }
  60. }
  61. </script>

image.png这个链接,是在前面准备工作时,在在线的 Apifox 工具中创建的模拟数据。

标签: ui vue.js elementui

本文转载自: https://blog.csdn.net/qq_40875570/article/details/133498747
版权归原作者 _钱钱 所有, 如有侵权,请联系我们删除。

“Vue2 + Element UI 实现分页搜索功能”的评论:

还没有评论