溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值怎么使用

發(fā)布時(shí)間:2023-05-05 11:26:50 來源:億速云 閱讀:222 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

首先el-cascader最常用的是顯示省市區(qū),所有省市區(qū)三四千項(xiàng)一下子加載出來總會(huì)有個(gè)卡頓的過程,所以我一般用動(dòng)態(tài)加載,這個(gè)element的文檔和例子很清楚了。

這是我代碼中的一部分,盡可能的去掉了多余的代碼

<el-cascader ref="areas" v-model="address.area_ids" 
:options="options" :props="props" separator="/" />
data() {
      return {
        options: [],
        address: {
          area: [],
          area_ids: [],
          value: '',
          lat: '',
          lng: ''
        },
        props: {
          lazy: true, //動(dòng)態(tài)加載開關(guān)
          lazyLoad(node, resolve) { //動(dòng)態(tài)加載函數(shù)
            const { level,value,label} = node;
            get("../city/get", {
              parentid: value
            }).then((res) => {
              if (res.state == 'success') {
                var data = res.data;
                data.map(item => {
                  item.leaf = item.child == "0" //leaf如果是true就結(jié)束了,意味著沒有下一級(jí)
                  return item;
                })
                resolve(data);
              } else {
                resolve([]);
              }
            })
          }
        }
      }
    },

正常選擇沒問題。一般剛開始的options默認(rèn)的是第一級(jí)的數(shù)組

最頭疼的部分,在編輯表單時(shí)要顯示出來前面已經(jīng)選擇過的項(xiàng),也就是回顯默認(rèn)值,首先保證v-mode的值是長度是3的數(shù)組(結(jié)合情況,不一定非要是3),一定保證[省,市,區(qū)]順序正確,我昨天大意寫錯(cuò)了市的id,檢查了一天沒發(fā)現(xiàn)問題。

另外,既然要顯示默認(rèn)值,肯定也要給el-cascader一個(gè)默認(rèn)的options,要保證是這種結(jié)構(gòu)

[
	{
	'value':'1',
	'label':'河南',
	'leaf':false,//不帶leaf,選項(xiàng)后面沒有向右的箭頭,下面的自行補(bǔ)充
	'children':[{
					'value':'11',
					'label':'鄭州',
					'children':[
						{
							'value':'111',
							'label':'中原區(qū)'
						},
						{
							'value':'112',
							'label':'二七區(qū)'
						}
					]
				},{
					'value':'12',
					'label':'洛陽'
				}]
	},
	{
	'value':'2',
	'label':'河北',
	}
]

應(yīng)該很清晰了,就是保證所選路徑的上下級(jí)和平級(jí)數(shù)據(jù)完整,為什么要完整,因?yàn)檫€有下面一個(gè)問題。

在options處理完后,默認(rèn)值應(yīng)該就可以正常顯示了。

但是當(dāng)再更換地區(qū)市,選了一下“鄭州”后發(fā)現(xiàn),鄭州的子級(jí)重復(fù)了(選“河南”也一樣),這也好理解,說明是鄭州的子級(jí)又加載了一遍并且填充到下級(jí)的選項(xiàng)組里了,新加載的和默認(rèn)的重復(fù)了。這畢竟不完美,做程序員慢慢有了強(qiáng)迫癥了,扒了扒element的源碼,問題很好解決,只是element官方?jīng)]有簡單明了的說出來。

在處理完options和v-model后,要處理選中項(xiàng)的加載狀態(tài),否則還會(huì)重新加載一次。

//上面的代碼自行補(bǔ)充
		this.$nextTick(_=>{
              var node=this.$refs.areas.getCheckedNodes(); //獲取當(dāng)前選中節(jié)點(diǎn)
              if(node&&node[0]&&node[0].pathNodes){//選中節(jié)點(diǎn)的所有父節(jié)點(diǎn)
                for(var i=0;i<node[0].pathNodes.length;i++){
                  node[0].pathNodes[i].loaded=true; //節(jié)點(diǎn)的加載狀態(tài)設(shè)為true,就不會(huì)再加載了
                }
              }
            })

讀到這里,這篇“element-ui中el-cascader動(dòng)態(tài)加載和默認(rèn)值怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI