大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。

前几天做了个功能,需求是使用利用element ui如何给下拉列表分页,经过网上查找,自己摸索,已经完成,今天来记录一下吧。

实现的效果

image-20211103160459223

当时因为下拉框中的数据过多,所以想到使用分页的方式来实现。

现在来看看具体的实现吧。

准备分页的组件

分页组件的代码是从网上拼凑的,代码如下:

<template><el-select v-model="childSelectedValue":filterable="remote"multiple:loading="loading":remote="remote":size="size":remote-method="remoteMethod":clearable="clearable"@change="handleChange"@clear="handleClear"@focus="handleFocus":style="{width: '93%'}":placeholder="placeholder"><el-optionv-for="item in optionSource":key="item[valueKey]":label="item[labelKey]":value="item[valueKey]"></el-option><el-paginationsmalllayout="prev, pager, next"@current-change="changeNumber":hide-on-single-page="true":page-size="paginationOption.pageSize":current-page="paginationOption.currentPage":pager-count="paginationOption.pagerCount":total="paginationOption.total"></el-pagination></el-select>
</template><script>export default {name: 'PaginationSelect',props: {//此参数只是为了父组件实现 v-model指令接受参数用,子组件中无实际意义// 在子组件中通过监听childSelectedValue值,来触发 input 事件,实现子父组件数据绑定value:{type:String,default: ''},valueKey:{//传入的option数组中,要作为最终选择项的键值名称type:String},labelKey:{//传入的option数组中,要作为显示项的键值名称type:String},clearable  :{//是否支持清除,默认支持type:Boolean,default:true},remote:{//是否支持远程搜索,默认支持type:Boolean,default:false},size:{//组件尺寸,配置项同select  String | medium/small/minitype:String,default:'medium'},loading:{//远程数据加载状态显示type:Boolean,default:false},placeholder   :{type:String,default:'给谁用'},optionSource:{//下拉框组件数据源type:Array,required:true},paginationOption:{//分页配置项type:Object,default:function () {return {pageSize:5,//每页显示条数  6条刚好currentPage:1,//当前页pagerCount:5,//按钮数,超过时会折叠total:10 //总条数}}}},data () {return {childSelectedValue:this.value,}},watch:{//监听子组件中选择的值得变化,每当选择一个项后,触发input事件,// 将子组件中选择的值通过input事件传递给父组件,实现父组件中v-model绑定的值的双向绑定childSelectedValue(val){this.$emit("input",val);},value(val){if(val!=null && val.length<1){this.childSelectedValue = '';}}},mounted(){},methods:{//子组件分页器,页码选择事件,父组件中监听子组件的 pageNationChange 事件,获取当前页码changeNumber(val){//此处的val是页码this.$emit("pageNationChange",val);},// 远程调用方法,在父组件中实现远程方法remoteMethod(val){if(val!=null && val.length>0){//只有输入的字符串长度大于1时,触发this.$emit("remote-method",val);}else{this.childSelectedValue = ' '}},//使组件支持change事件handleChange(val){this.$emit("change",val);},//使组件支持clear事件handleClear(val){this.$emit("clear",val);},//解决远程搜索无结果时,显示清除按钮问题handleFocus(){if(this.childSelectedValue.length<1){this.childSelectedValue = ''}}}
}
</script><style scoped></style>

关键代码都有注释,所以这里就不过多解释。直接放到项目中即可使用,下面再来看看怎么使用。

父组件的写法

父组件中的代码,网上不全,基本上都是自己整理的,首先在需要写下拉列表的地方写:

<!--添加人员 --><el-form-item label="选择人员"  ><pagination-select@pageNationChange="pageNationChange"@change="getAthIdsAdd":optionSource="athListAllByLocal"v-model="fanganform.pbeizhu"labelKey="aname"valueKey="id":paginationOption="setSelectPage"></pagination-select></el-form-item>

pageNationChange为下拉列表分页的点击事件,执行的方法如下:

//下拉列表分页的点击的事件pageNationChange(val){//设置当前页为点击的页this.setSelectPage.currentPage = val;//重新调用分页查询的方法this.getAthListLocal(this.setSelectPage);},

change为下拉列表选项的改变事件,执行方法如下:

//获取下拉框中的运动员编号--保存方案getAthIdsAdd(val){var names = "";for(let i=0;i<=val.length-1;i++){this.athListAllPaged.find((item)=>{if(item.id === val[i]){names+=item.aname+",";}});}console.log(names);this.fanganform.ppersons = names;},

因为我需要把值和名称都存在数据库中,所以这里需要根据id来遍历一下name的值。

optionSource为下拉列表中的数据源。

paginationOption为分页的属性,代码如下:

//分页信息setSelectPage:{pageSize:6,//每页显示条数  3条刚好currentPage:1,//当前页pagerCount:5,//按钮数,超过时会折叠total:0 //总条数},

分页查询信息的代码如下:

//查询本地的运动员getAthListLocal(setSelectPage){getListAthPage(setSelectPage.currentPage,setSelectPage.pageSize).then(res => {const data = res.data.data;//下拉列表数据源绑定this.athListAllByLocal =data.records;//绑定总记录数this.setSelectPage.total = data.total;//if(this.athListAllPaged.length===0){this.athListAllPaged=data.records;}else {//追加数据for(let i = 0;i<data.records.length;i++){this.athListAllPaged.push(data.records[i]);}}});},

如果需要更改分页的的按钮数和页大小,可以直接修改setSelectPage中的pageSizepagerCount即可。

最后的效果就实现了。

image-20211103161711255

vue使用element ui实现下拉列表分页的功能!!!相关推荐

  1. element ui实现前端分页

    element ui里的分页组件: <el-pagination@size-change="handleSizeChange"@current-change="ha ...

  2. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

      方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...

  3. 【Vue】 element ui 引入第三方图标

    最近一个项目用到 vue 和 element ui开发前端.使用element ui自带的icon太少,所以引入第三方的.截止目前为止国内外网络上的相关教程我搜索到没超过5篇,而且都不详细,即使全部阅 ...

  4. Node mysql mvc vue_net MVC +Vue.js+Element UI 笔记

    最近项目需求,要在MVC里用Vue 与 Element UI,故而做个笔记来记录一些遇到的问题和处理思路 (方式比较麻瓜,如果不是临时用的话,建议还是学一下Vue-cli,新项目还是老老实实前后端分离 ...

  5. Vue安装element ui踩坑

    在vue安装element ui 的过程中报了许多错误,慢慢踩坑,希望能帮到各位 1.  输入  vue add element    输入 y y zh-CN 如果报错  ERROR  comman ...

  6. element ui Table表格数据筛选功能实现

    先来看看实现效果 element ui Table表格数据筛选功能实现 查看Element官网 关于筛选的实例. 在列中设置filters filter-method属性即可开启该列的筛选,filte ...

  7. element ui - el-select 添加可输入功能

    element ui - el-select 可以支持输入功能 场景 思路 方法 场景 vue2 + element ui 的项目中,产品希望 el-select 可以支持输入功能,也就说用户既可以下 ...

  8. element ui——Pagination 自定义分页样式

    我们可以看到,element ui Pagination分页默认样式 直接显示 首页 - 中间页 - 末页,但当项目中数据量过大时,用户直接点击最后一页 可能会导致后端elk崩溃.项目最后要求 不能把 ...

  9. Vue+JS+Element UI实战(电商项目1)

    目录 1.电商业务概述 2.电商后台管理系统的功能 ​3.项目初始化步骤 4.后台项目的环境安装配置 4.1. API V1 接口说明 4.2. 支持的请求方法 4.3. 通用返回状态说明 5.测试后 ...

最新文章

  1. SpringBoot (八) :Spring Boot多数据源(JdbcTemplate)配置与使用
  2. P1111 修复公路
  3. .NetCore使用skywalking实现实时性能监控
  4. 可禁用计算机服务,win10哪些服务可以禁用 服务哪些可以禁止启动
  5. 解决: 'Cannot call `.is_valid()` as no `data=` keyword argument was ' AssertionError: Cannot call `
  6. CarbonData:大数据融合数仓新一代引擎
  7. Python绘制带有中文标签和图例的图
  8. C#通过序列化实现深表复制
  9. 三个版本Eclipse区别
  10. 详解利用ShoeBox制作位图字体
  11. Atitit.eclipse comment  template注释模板
  12. python实现第三方验证码获取_Python 原生爬虫教程
  13. c++ 查看opencv版本 linux
  14. Xcode 9 上传ipa包异常
  15. 外部无法连接部署在linux上的MongoDB
  16. 视频去水印的Python代码
  17. 成为一名合格的算法工程师需要掌握哪些技能?
  18. 家园系统服务器,梦幻西游手游家园系统外观全面升级
  19. 在这个产品同质化比较严重的时代,这个局怎么破?
  20. Elasticsearch mapping与analysis

热门文章

  1. [Java基础]增强for循环
  2. 数据结构与算法--链表实现以及应用
  3. 计算机网络----wireshark抓包
  4. word List 34
  5. 3085 吃遍赴丝码(分治)
  6. B. Alyona and a tree(dsu on tree + bit)
  7. 剑指 Offer 38. 字符串的排列(有重复元素的排列)
  8. AGAGA XOOORRR CodeForces - 1516B
  9. 水题(water)(非详细解答)
  10. [CQOI2018] 解锁屏幕(状压dp)