el-cascader級聯(lián)選擇器優(yōu)化:搜索后自動關(guān)閉下拉框

解決使用el-cascader時(shí)選擇了某個(gè)值后下拉框無法關(guān)閉的問題

背景

在使用 Element Plus 的級聯(lián)選擇器組件時(shí),我們遇到了一個(gè)用戶體驗(yàn)問題:當(dāng)用戶通過搜索關(guān)鍵詞選中某個(gè)選項(xiàng)后姐扮,下拉框并不會自動關(guān)閉币叹,用戶需要手動點(diǎn)擊外部區(qū)域才能關(guān)閉下拉框赏壹。此外百拓,搜索關(guān)鍵詞也不會自動清除,這可能會影響用戶的下一次操作忍饰。

目標(biāo)

  1. 實(shí)現(xiàn)搜索關(guān)鍵詞后贪嫂,選中選項(xiàng)時(shí)自動關(guān)閉下拉框
  2. 清除搜索關(guān)鍵詞
  3. 保持原有的多選功能正常工作

解決方案

我們通過以下步驟實(shí)現(xiàn)了這個(gè)功能:

  1. 添加一個(gè) isSearching 狀態(tài)來跟蹤是否正在進(jìn)行搜索
  2. filterMethod 中更新 isSearching 狀態(tài)
  3. handleChange 方法中根據(jù) isSearching 狀態(tài)來控制下拉框的關(guān)閉

代碼實(shí)現(xiàn)

<template>
  <div style="width: 100%">
    <el-cascader
      :style="{ width: '100%' }"
      v-model="selectedOptions"
      :options="extractedOptions"
      :props="{ value: 'direId', label: 'directName', children: 'children', multiple: true, emitPath}"
      filterable
      multiple
      collapse-tags
      max-collapse-tags="5"
      filter-select-all
      :show-all-levels="false"
      clearable
      :placeholder="placeholder"
      :filter-method="filterMethod"
      @change="handleChange"
      ref="cascaderCityRef"
    />
  </div>
</template>

<script setup>
import { ref, watch, defineProps, defineEmits, computed } from 'vue'
import { extractChildrenByLevel } from '@/utils/index'

// ... 其他代碼 ...

// 是否輸入搜索關(guān)鍵詞
const isSearching = ref(false)

const handleChange = (value) => {
  console.log("Selected value:", value);
  console.log(
    "Selected label:",
    cascaderCityRef.value.getCheckedNodes().map((i) => i.data)
  );
  // 搜索選中值之后,切換 popper 可見狀態(tài)
  if (isSearching.value) {
    isSearching.value = false;
    cascaderCityRef.value.togglePopperVisible(); // 監(jiān)聽值發(fā)生變化就關(guān)閉它
  }
  emit(
    "change",
    value,
    cascaderCityRef.value.getCheckedNodes().map((i) => i.data)
  );
};

const filterMethod = (node, keyword) => {
  if (keyword) {
    isSearching.value = true
  } else {
    isSearching.value = false
  }
  return node.label.includes(keyword);
}

// ... 其他代碼 ...
</script>

實(shí)現(xiàn)細(xì)節(jié)

  1. isSearching 狀態(tài)

    • 我們引入了 isSearching ref 來跟蹤是否正在進(jìn)行搜索艾蓝。
  2. filterMethod 函數(shù)

    • 當(dāng)有關(guān)鍵詞輸入時(shí),將 isSearching 設(shè)置為 true斗塘。
    • 當(dāng)關(guān)鍵詞為空時(shí)赢织,將 isSearching 設(shè)置為 false
  3. handleChange 方法

    • 當(dāng) isSearchingtrue 時(shí)馍盟,表示用戶通過搜索選中了選項(xiàng)于置。
    • 在這種情況下,我們將 isSearching 重置為 false贞岭,并調(diào)用 cascaderCityRef.value.togglePopperVisible() 來關(guān)閉下拉框八毯。

優(yōu)點(diǎn)

  1. 提升了用戶體驗(yàn),搜索選中后自動關(guān)閉下拉框瞄桨。
  2. 清除了搜索關(guān)鍵詞话速,為下一次操作做好準(zhǔn)備。
  3. 不影響級聯(lián)選擇器的多選功能芯侥。

注意事項(xiàng)

  1. 確保 cascaderCityRef 正確引用了級聯(lián)選擇器組件泊交。
  2. 這個(gè)解決方案依賴于 Element Plus 的內(nèi)部方法 togglePopperVisible(),如果未來版本更改了這個(gè)方法柱查,可能需要相應(yīng)調(diào)整廓俭。

結(jié)論

通過這個(gè)優(yōu)化,我們顯著改善了級聯(lián)選擇器的用戶體驗(yàn)唉工,特別是在搜索和選擇場景中研乒。這個(gè)解決方案既簡單又有效,可以很容易地集成到現(xiàn)有的 Element Plus 級聯(lián)選擇器實(shí)現(xiàn)中淋硝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雹熬,一起剝皮案震驚了整個(gè)濱河市错维,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橄唬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隆判,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涨共,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門扒吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魁索,“玉大人粗蔚,你說我怎么就攤上這事。” “怎么了瀑构?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵呻征,是天一觀的道長沐祷。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么吵聪? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮金砍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好敛苇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顺呕,像睡著了一般枫攀。 火紅的嫁衣襯著肌膚如雪括饶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天来涨,我揣著相機(jī)與錄音图焰,去河邊找鬼。 笑死蹦掐,一個(gè)胖子當(dāng)著我的面吹牛技羔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笤闯,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼堕阔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颗味?” 一聲冷哼從身側(cè)響起超陆,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浦马,沒想到半個(gè)月后时呀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶默,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年谨娜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磺陡。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趴梢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出币他,到底是詐尸還是另有隱情坞靶,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布蝴悉,位于F島的核電站彰阴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拍冠。R本人自食惡果不足惜尿这,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庆杜。 院中可真熱鬧射众,春花似錦、人聲如沸欣福。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雏逾,卻和暖如春嘉裤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栖博。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工屑宠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仇让。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓典奉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丧叽。 傳聞我的和親對象是個(gè)殘疾皇子卫玖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容