element ui 下拉框分页(下拉框数据过多)
2021-05-24 11:54
1506 查看
下拉框数据过多
Element UI中的下拉框是一个非常使用的组件。但是在实际开发中会遇到数据过多的问题。
最近的项目中需要使用下拉框来展示物料信息,但是物料信息有9000多条,最初是全部加载,但是会造成渲染特别的慢。后来采取的解决方式是后台每次返回30条数据,再通过远程搜索的方式获取需要的数据。采用远程搜索也存在一个问题,因为每次只显示30条,如果输入的关键字过短,你想要查找的值会不在这30条数据里,只能进一步的明确关键字。后来百度了一下,有个解决方案是在下拉框中实现分页,然后我自己也简单写了一个。
注:我是根据自己的业务写的,不会通用,而且会存在一些bug。如果有需要可以在此基础上自己再修改。
代码:
<template> <div> <el-select :disabled="disabled" :multiple="multiple" clearable filterable remote :remote-method="remoteSearch" placeholder="请选择" v-model="selectValue" @change="handleChange" @visible-change="handleVisible"> <div class="option"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </div> <div class="pagin"> <el-pagination small layout="prev, pager, next, total" :page-size="pageSize" :total="pageNumberAll" :current-page="pageNumber" @current-change="pag 20000 e"> </el-pagination> </div> </el-select> </div> </template> <script> export default { components: {}, props: { // 绑定的值(双向绑定显示的值) select: { type: [String,Array], required: true }, // 是否多选 multiple: { type: Boolean, default: false }, // 请求地址 url: { type: String, required: true }, // 是否禁用 disabled: { type: Boolean, default: false }, // 模糊查询关键字 filrerKey: { type: String, default: '' }, // 下拉修改时使用到的参数 editinfo: { type: Object, default: () => {} }, // 回调函数 callback: { type: Function } }, data() { // 这里存放数据 return { options: [], selectValue: '', pageNumber: 1, pageSize: 30, pageNumberAll: 0 }; }, mounted() { // 函数调用顺序要在options赋值为空数组之后 this.initData(); this.getOptionList(); }, // 方法集合 methods: { // 处理值改变事件 handleChange(value) { this.$emit('update:select',value); }, // 下拉框隐藏事件 handleVisible(val) { // 下拉框隐藏后重新加载下拉数据 if(!val) { this.getOptionList(); } }, // 过滤,实现模糊查询 remoteSearch(value = '') { let params = {}; let that = this; if(value) { params = { queryConfig: [{ name: that.filrerKey, condition: 'like', value: value }] }; } this.getOptionList(params); }, // 获取列表数据 getOptionList(query = {}) { this.options = []; let params = Object.assign({ pageSize: 30, pageNumber: 1 },query); this.$http.post(this.url,params) .then(({data: d}) => { if(d.code == 0) { this.pageNumberAll = d.data.total; d.data.records.forEach(item => { this.options.push({ label: item.materialName, value: item.materialNo }); }); } }); // 这里主要针对修改操作,如果当前下拉显示的值没有在下拉选项数组里(因为options数组里的值是会变化的) // 显示时会将value转换成字符串然后显示,所有将这条修改的数据添加到选项数组中 if(this.editinfo && (JSON.stringify(this.editinfo)) != '{}') { this.options.push(this.editinfo); } }, // 初始化数据 initData() { // 当父组件上存在值时,对select值进行初始化 this.selectValue = this.select; }, // 主表格分页点击事件 page(page) { this.pageNumber = page; this.getOptionList(); // 更新 } } }; </script> <style lang="scss" scoped> .option{ height: 200px; overflow-y: auto; } .pagin{ background:#fff; } ::-webkit-scrollbar{ width: 10px; } </style>
效果
相关文章推荐
- element-ui中el-select下拉框数据过多,用pinyin-match实现拼音、首字母、汉字等模糊搜索
- RadComboBox 的 Virtualization 方式,解决数据过多,下拉列表显示缓慢问题。
- (转)RadComboBox 的 Virtualization 方式,解决数据过多,下拉列表显示缓慢问题。
- select下拉框数据回显
- 如何把select选项给只读,让他不可选,但数据还是保存在下拉表中
- 在数据库配置下拉框数据,后台绑定数据
- ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动
- ASP.NET仿新浪微博下拉加载更多数据瀑布流效果
- 基于layui的下拉列表的数据回显方法
- FormView中下拉框 (DropDownList) 的数据绑定
- 润乾报表下拉数据表异步加载
- 上下拉刷新之第三方库MJRefresh 的具体使用——(用于UITabView的数据刷新)
- 下拉列表select中使用ajax的json数据交换格式动态改变div层里面的复选框checkbox值
- 关于MUI如何重新下拉列表数据
- ListView实现下拉动态渲染数据
- 获取DataGridView绑定BindingSource的数据表,并根据树控件点击进行筛选数据表,下拉控件自定义排序问题初步解决方法,解决了该行属于另一个表的错误提示.
- JSP开发 — 修改数据时,下拉框中绑定对应数据
- Android ListView下拉加载更多,http请求加载数据,Item点击事件
- 根据树状数据渲染树状下拉选项
- 3级联动下拉列表-数据库版