el-select中下拉数据太多,页面卡顿

问题

下拉框选项数据太多:由于下拉的数据过多,导致页面渲染复杂化,使得页面卡顿或者卡死问题。

解决办法

由于数据过多导致渲染卡顿,所以减少需要渲染的数据。首先,我们可以在拿到数据的时候进行懒加载,默认只展示20条数据,随着用户下拉的滑动,逐渐增加条数。这里我们自定义一个下拉的懒加载。其次,使用fildter-method方法进行过滤下拉数据。

示例代码

<template>
	<el-select v-model="accept_id" v-selectloadmore:rangeNum="() => rangeNum += 10" size="mini" filterable :filter-		method="filterMethod" placeholder="选择接收方">
   <el-option v-for="item in acceptList.slice(0,rangeNum)" :key="item.id" :value="item.id" :label="item.name">
     {{ item.name }}
   </el-option>
 </el-select>
</template>
<script>
 export default {
   	directives: {
	    'selectloadmore': {
	      bind(el, binding) {
	        const selectDom = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
	        selectDom.addEventListener('scroll', () => {
	          if (selectDom.scrollHeight - selectDom.scrollTop <= selectDom.clientHeight + 20) {
	            binding.value()
	          }
	        })
	      }
	    }
	 },
	data(){
		return {
			accept_id:undefined,
			acceptList:[],
			copyAcceptList:[],
			rangeNum: 20,
		}
	},
	mounted(){
		//获得acceptList的数据
	},
	methods:{
		filterMethod (){
			this.rangeNum = 20
			//请求接口,筛选数据
		}
	}
}
</script>
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在第一个 `el-select` 的 `change` 事件更新第二个 `el-select` 的选项来实现。 假设第一个 `el-select` 的选项数据为 `options1`,第二个 `el-select` 的选项数据为 `options2`,则可以在第一个 `el-select` 的 `change` 事件筛选出符合条件的选项,并更新第二个 `el-select` 的选项数据。代码如下: ```html <template> <div> <el-select v-model="selectedOption1" @change="handleSelect1Change"> <el-option v-for="option in options1" :key="option.value" :label="option.label" :value="option.value"></el-option> </el-select> <el-select v-model="selectedOption2"> <el-option v-for="option in filteredOptions2" :key="option.value" :label="option.label" :value="option.value"></el-option> </el-select> </div> </template> <script> export default { data() { return { selectedOption1: '', selectedOption2: '', options1: [ { value: '1', label: '选项1' }, { value: '2', label: '选项2' } ], options2: [ { value: 'A1', label: '选项A1', parentId: '1' }, { value: 'A2', label: '选项A2', parentId: '1' }, { value: 'B1', label: '选项B1', parentId: '2' }, { value: 'B2', label: '选项B2', parentId: '2' } ] } }, computed: { filteredOptions2() { return this.options2.filter(option => option.parentId === this.selectedOption1) } }, methods: { handleSelect1Change() { this.selectedOption2 = '' } } } </script> ``` 上述代码,`filteredOptions2` 是一个计算属性,用于筛选出符合条件的选项。在 `handleSelect1Change` 方法,将第二个 `el-select` 的选项清空,以便在更新选项时能够正确判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值