最近在做一個功能,要求級聯選擇器,選擇每一級都可以,於是就先看下餓了麼,找了半天發現好像沒有這種,只有級聯選擇最後一級,然後這個又是返回的遞歸的數據,讓我手寫重新寫一個屬實有點浪費時間。
找了好久好久,實現找不到,問了下隔壁的前端老哥,他就來幫我找,也是找了好久沒有找到,後面他看到我 element 版本是 2.0.11
然後把版本切換到最新版,我當時就傻逼了,我特麼頓時感覺自己是哥沙雕,我收藏的網址每次打開的都是那個版本。。。
溫馨提示:Cascader 級聯選擇器 選擇任意一級 請切換到 2.12.0 最新版
然後看了下,果然有我想要的東西。如下圖:
我的實現效果,是不是感覺一摸一樣?
but,特麼這官網這個有兩個問題:
- 點擊圓圈後理想是自動收起下拉,但是他這個也沒有
我吐血三分鐘。。。。
- 而且只能點擊圓圈才能選中,點擊文字 label 沒有效果,
我又吐血三分鐘。。。。
於是,開始了艱辛的百度歷程: 最後依然沒有找到答案,好像很少人用這種,級聯每一級都可以選擇的。。。用得多的就是選中最後一級,像省級聯動之內的
打鐵還需自身硬,只有自己去慢慢看了。後面終於解決了這兩個問題:
先看第一個問題,讓他收起來,這個好像不難,確實不難:
設置每次監聽值變化的時候,把 dropDownVisible
屬性設置爲 false 即可。(雖說簡單,但是這個屬性我找了半天,官網根本沒有說~~~~(>_<)~~~~ )
watch: {
handlerValue() {
if (this.$refs.refHandle) {
this.$refs.refHandle.dropDownVisible = false; //監聽值發生變化就關閉它
}
}
},
在看看第二個問題,點擊label 也每次讓他選中,臥槽,無從下手,後面怎麼解決的說來話長,看實現代碼吧。
mounted() {
//點擊文本就讓它自動點擊前面的input就可以觸發選擇。但是因組件阻止了冒泡,暫時想不到好方法來觸發。
//這種比較耗性能,暫時想不到其他的,能實現效果了。
setInterval(function() {
document.querySelectorAll(".el-cascader-node__label").forEach(el => {
el.onclick = function() {
if (this.previousElementSibling) this.previousElementSibling.click();
};
});
}, 1000);
},