欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

el-select下拉選擇緩存的實現(xiàn)

 更新時間:2025年01月09日 15:47:30   作者:weixin_43939111  
本文主要介紹了在使用el-select實現(xiàn)下拉選擇緩存時遇到的問題及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項目場景:

在這里插入圖片描述

從左側(cè)列表中選取字段填入右側(cè)下拉多選框,用戶可以對右側(cè)已選字段模擬緩存:下拉顯示時展示已選字段列表,對選項選中或取消操作時下拉框展示選中與取消的字段;下拉隱藏時,下拉框選項與右側(cè)遺留標(biāo)簽同步。

問題描述

1、查閱資料,通過給el-select綁定@change方法可以監(jiān)聽到選中值的變換(只能獲取當(dāng)前已選中的所有值(array方式存儲),如果監(jiān)聽變化的是哪個值,需自定義變量緩存上一次存儲與當(dāng)前選中做對比)。
2、@visible-change監(jiān)聽下拉框的顯示與隱藏,會在顯示和隱藏時都觸發(fā)。
3、初始設(shè)想:刪除輸入框內(nèi)標(biāo)簽時,直接將值返回到左側(cè)列表,下拉框選項數(shù)量更新;取消下拉框內(nèi)選擇時,輸入框內(nèi)值刪除,下拉框內(nèi)選項數(shù)量保持不變,下拉隱藏時將取消選擇的值返回左側(cè)列表。
然而實際發(fā)現(xiàn):change方法無論是輸入框選項操作還是下拉框選項操作都會觸發(fā),無法區(qū)分在哪個區(qū)域操作。

解決方案:

改變設(shè)計思路:

  • 下拉框不顯示,添加與刪除項同步更新下拉選項
  • 下拉框顯示時,下拉框緩存初始展示數(shù)據(jù)。在下拉框中取消選項同時數(shù)據(jù)項返回左側(cè)列表,重新選中時左側(cè)列表項刪除并移入下拉多選,隱藏時下拉框保持最新選中項存儲

關(guān)鍵代碼:

<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,//下拉框顯示狀態(tài),false為隱藏,true為顯示
			lastOperation:{data:[]},//上次選擇
			startOption:false,//判斷是否第一次打開下拉框
			tableData:[{id:0,name:"M1_GRAT"},{id:1,name:"M2_GRAT"},...],//模擬左側(cè)列表數(shù)據(jù)
		}
	},
	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 { //下拉框不顯示,只有刪除選項時觸發(fā)
				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中,方便調(diào)整多選下拉框樣式②multiple是el-select多選必須添加的屬性

到此這篇關(guān)于el-select下拉選擇緩存的實現(xiàn)的文章就介紹到這了,更多相關(guān)el-select下拉選擇緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析vue中的$mount

    解析vue中的$mount

    本文主要是帶領(lǐng)大家分析$mount的相關(guān)知識,需要的朋友一起學(xué)習(xí)吧
    2017-12-12
  • Vue基本指令實例圖文講解

    Vue基本指令實例圖文講解

    這篇文章主要介紹了Vue基本指令實例圖文講解,文章將基本指令講解的很清楚,有對于指令不太懂的同學(xué)可以跟著學(xué)習(xí)研究下
    2021-02-02
  • Vue3中進行頁面局部刷新組件刷新的操作方法

    Vue3中進行頁面局部刷新組件刷新的操作方法

    這篇文章主要介紹了Vue3中進行頁面局部刷新組件刷新的操作方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 解決Vue+SpringBoot+Shiro跨域問題

    解決Vue+SpringBoot+Shiro跨域問題

    本文將結(jié)合實例代碼,解決Vue+SpringBoot+Shiro跨域問題,相信大家剛開始做都會遇到這個問題,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 淺析Vue 中的 render 函數(shù)

    淺析Vue 中的 render 函數(shù)

    在vue中我們使用模板HTML語法組建頁面的,使用render函數(shù)我們可以用js語言來構(gòu)建DOM,今天小編就通過本文給大家簡單介紹下Vue 中 render 函數(shù),需要的朋友可以參考下
    2020-02-02
  • vue基于Teleport實現(xiàn)Modal組件

    vue基于Teleport實現(xiàn)Modal組件

    Teleport 提供了一種干凈的方法,允許我們控制在 DOM 中哪個父節(jié)點下渲染了 HTML,而不必求助于全局狀態(tài)或?qū)⑵洳鸱譃閮蓚€組件。
    2021-05-05
  • VueJS頁面渲染之后如何調(diào)用函數(shù)

    VueJS頁面渲染之后如何調(diào)用函數(shù)

    這篇文章主要介紹了VueJS頁面渲染之后如何調(diào)用函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue3中watch的用法與最佳實踐指南

    Vue3中watch的用法與最佳實踐指南

    這篇文章主要給大家介紹了關(guān)于Vue3中watch用法與最佳實踐的相關(guān)資料,watch的作用可以監(jiān)控一個值的變換,并調(diào)用因為變化需要執(zhí)行的方法,可以通過watch動態(tài)改變關(guān)聯(lián)的狀態(tài),需要的朋友可以參考下
    2021-07-07
  • 使用Vue父子組件通信實現(xiàn)todolist的功能示例代碼

    使用Vue父子組件通信實現(xiàn)todolist的功能示例代碼

    這篇文章主要給大家介紹了關(guān)于如何使用Vue父子組件通信實現(xiàn)todolist的功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue3項目中使用three.js的操作步驟

    vue3項目中使用three.js的操作步驟

    最近在學(xué)習(xí)Three.js相關(guān)的技術(shù),恰逢Vue 3.0正式版也已推出,下面這篇文章主要給大家介紹了關(guān)于vue3項目中使用three.js的操作步驟,文中通過圖文以及實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評論