el-select下拉选择缓存的实现

 更新时间:2025年01月09日 15:47:30   作者:weixin_43939111  
本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

项目场景:

在这里插入图片描述

从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧已选字段模拟缓存:下拉显示时展示已选字段列表,对选项选中或取消操作时下拉框展示选中与取消的字段;下拉隐藏时,下拉框选项与右侧遗留标签同步。

问题描述

1、查阅资料,通过给el-select绑定@change方法可以监听到选中值的变换(只能获取当前已选中的所有值(array方式存储),如果监听变化的是哪个值,需自定义变量缓存上一次存储与当前选中做对比)。
2、@visible-change监听下拉框的显示与隐藏,会在显示和隐藏时都触发。
3、初始设想:删除输入框内标签时,直接将值返回到左侧列表,下拉框选项数量更新;取消下拉框内选择时,输入框内值删除,下拉框内选项数量保持不变,下拉隐藏时将取消选择的值返回左侧列表。
然而实际发现:change方法无论是输入框选项操作还是下拉框选项操作都会触发,无法区分在哪个区域操作。

解决方案:

改变设计思路:

  • 下拉框不显示,添加与删除项同步更新下拉选项
  • 下拉框显示时,下拉框缓存初始展示数据。在下拉框中取消选项同时数据项返回左侧列表,重新选中时左侧列表项删除并移入下拉多选,隐藏时下拉框保持最新选中项存储

关键代码:

<template>
   <el-select :popper-append-to-body="false" class="hide_error" v-model="variables_columns" multiple @visible-change="hideOption" @change="turnOption" placeholder="请选择" id="varia-col-select">
        <el-option
         v-for="item in checkedList"
         :key="item.value"
         :label="item.label"
         :value="item.value"
         >
      </el-option>
   </el-select>
</template>

js

export default {
	data(){
		return {
			variables_columns:[],
			optionVisible:false,//下拉框显示状态,false为隐藏,true为显示
			lastOperation:{data:[]},//上次选择
			startOption:false,//判断是否第一次打开下拉框
			tableData:[{id:0,name:"M1_GRAT"},{id:1,name:"M2_GRAT"},...],//模拟左侧列表数据
		}
	},
	methods:{
		hideOption(){//隐藏时更新下拉选项
			this.optionVisible = !this.optionVisible;
			if(!this.optionVisible){
				this.checkList = this.checkList.filter(
					item => this.variables_columns.some(v => v==item.value)
				)
			}
		},
		turnOption(val){//缓存选项
			if(!this.startOption)this.lastOperation.data = this.checkList.map(item => item.value);
			this.startOperation = true;
			let item = [];
			if(this.optionVisable){//下拉框显示时
				if(this.lastOperation.data.length>val.length){//取消选项操作
					item = this.lastOperatin.data.filter(v => !val.some(v1 => v1 == v));
					let backNode = {id:this.tableData.length,name:item[0]};//返回的元素
					this.tableData.push(backNode);
				}else{//在下拉框中重新选中
					let delNode = val.filter(v1 => !this.lastOperation.data.some(v2 => v1 == v2));
					this.tableData = this.tableData.filter(v => v.name != delNode[0])
				}
			} else { //下拉框不显示,只有删除选项时触发
				item = this.checkedList.filter(v => !val.some(v1 => v1 == v.value));
				this.checkList = this.checkList.filter(v => val.some(v1 => v.value));
				let backNode = {id:this.tableData.length,name:item[0].value}
				this.tableData.push(backNode);
			}
			this.lastOperation.data = val;
		}
	},
	...
}

备注:①:popper-append-to-body="false"可将下拉框dom嵌入div中,方便调整多选下拉框样式②multiple是el-select多选必须添加的属性

到此这篇关于el-select下拉选择缓存的实现的文章就介绍到这了,更多相关el-select下拉选择缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2中vue-router引入使用详解

    vue2中vue-router引入使用详解

    Vue Router 是 Vue 的官方路由,它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举,下面就跟随小编一起学习一下vue-router的具体用法吧
    2023-12-12
  • Vue中directive的钩子函数(bind,inserted等)用法及使用说明

    Vue中directive的钩子函数(bind,inserted等)用法及使用说明

    Vue指令钩子函数(bind、inserted等)用于在不同阶段操作元素,bind绑定时初始化,inserted插入DOM后执行,update值变化时触发,componentUpdated全部更新后调用,unbind解绑时清理,根据需求选择对应钩子实现功能增强
    2025-07-07
  • Vite+Vue3项目版本更新检查与页面自动刷新的实现方案

    Vite+Vue3项目版本更新检查与页面自动刷新的实现方案

    使用 Vite 对 Vue 项目进行打包,对 js 和 css 文件使用了 chunkhash 进行了文件缓存控制,但是项目的 index.html 文件在版本频繁迭代更新时,会存在被浏览器缓存的情况,所以本文介绍了Vite+Vue3项目版本更新检查与页面自动刷新方案,需要的朋友可以参考下
    2025-09-09
  • Vue实现二维码的展示及下载功能

    Vue实现二维码的展示及下载功能

    这篇文章主要介绍了Vue实现二维码的展示及下载功能,其中downloadQRCode()函数中的url为要下载的文件的路径,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Vue中进行分布式鉴权与认证的过程

    Vue中进行分布式鉴权与认证的过程

    在Vue应用中,我们通常需要实现分布式鉴权和认证,以确保用户的安全性和数据的保密性,本文将介绍在Vue中如何进行分布式鉴权与认证,需要的朋友可以参考下
    2023-06-06
  • 深入探讨Vue计算属性与监听器的区别和用途

    深入探讨Vue计算属性与监听器的区别和用途

    在Vue的开发中,计算属性(Computed Properties)和监听器(Watchers)是两种非常重要的概念,它们都用于响应式地处理数据变化,本文将带你深入了解计算属性和监听器的区别,以及在何时使用它们,感兴趣的朋友可以参考下
    2023-09-09
  • vue实现tab标签(标签超出自动滚动)

    vue实现tab标签(标签超出自动滚动)

    当创建的tab标签超出页面可视区域时自动滚动一个tab标签距离,并可手动点击滚动tab标签,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Vue.js实现一个SPA登录页面的过程【推荐】

    Vue.js实现一个SPA登录页面的过程【推荐】

    本篇文章主要介绍了Vue.js写一个SPA登录页面过程的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • 解决Vue大括号字符换行踩的坑

    解决Vue大括号字符换行踩的坑

    这篇文章主要介绍了解决Vue大括号字符换行踩的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • webStorm debug vue项目的两种方案图文详解

    webStorm debug vue项目的两种方案图文详解

    WebStorm作为一款功能强大的IDE,提供了丰富的调试功能和技巧,可以帮助你更高效地开发和调试Vue应用,这篇文章主要给大家介绍了关于webStorm debug vue项目的两种方案,需要的朋友可以参考下
    2024-07-07

最新评论