Element-UI中<el-cascader?/>回顯失敗問題的完美解決
項目場景:
項目場景:接手了一些老項目,需要做一些日志相關的操作,從后臺日志跳轉到相應頁面要帶上原來的請求參數(shù),涉及到一個回顯問題
問題描述
Element-UI的 <el-cascader /> 這個組件,賦值之后它不會回顯!而且后端返回的值只有最后一級的id,可是一個勁看文檔、找資料浪費大半天,所以總結了一個比較完美的辦法
原因分析:
value 屬性才是回顯的關鍵,只有綁定了value屬性才會讓
<el-cascader />回顯(單選情況下是一維數(shù)組、多選是二維數(shù)組),而且數(shù)組中的值一定是最后一級的id加上它父級的id組成

在這里放一下模擬的數(shù)據(jù)
depart_check: [],
options: [
{
value: 1,
label: '東南',
children: [
{
value: 11,
label: '上海',
children: [{
value: 111,
label: '黃浦區(qū)'
}, {
value: 112,
label: '靜安區(qū)'
}, {
value: 113,
label: '虹口區(qū)'
}, {
value: 114,
label: '長寧區(qū)'
}]
}, {
value: 12,
label: '江蘇',
}, {
value: 13,
label: '浙江',
}
]
},
{
value: 2,
label: '西北',
children: [{
value: 21,
label: '陜西',
}, {
value: 22,
label: '新疆維吾爾族自治區(qū)',
}]
}
]
解決方案:
由于后端返回來的只有最后一級的id,所以我們需要寫一個遞歸來拿到最后一級id和它父級id的數(shù)組
廢話不多說直接上代碼
/*
* @param list 數(shù)據(jù)列表
* @param id 后端返回的id
**/
getParentsById(list, id) {
for (let i in list) {
if (list[i].value == id) {
//查詢到就返回該數(shù)組對象的value
return [list[i].value]
}
if (list[i].children) {
let node = this.getParentsById(list[i].children, id)
if (node !== undefined) {
//查詢到把父節(jié)把父節(jié)點加到數(shù)組前面
node.unshift(list[i].value)
return node
}
}
}
},
方法有了之后就開始解決問題
一、多選賦值回顯
因為多選的時候綁定的value是個二維數(shù)組
比如隨便選倆,change事件拿到的值就是[[1,11,111], [1,12] ]
// 選擇單位
handlechangedepatt(v) {
console.log(v)
this.depart_check = v
},


因為后端只會返回來111、12兩個值還是字符串格式
"111,12",所以處理開始
let _depart_check = data.depart_id ? data.depart_id.split(",").map(i => Number(i)) : []
let _arr = []
// 使用上面寫的方法 getParentsById 找出父級id并組合
_depart_check && _depart_check.map(i => _arr.push(this.getParentsById(this.options, i)))
console.log("_arr: ",_arr)
this.depart_check = _arr
控制臺打印拿到的_arr,完美和change事件里拿到的值是一個格式,這樣回顯就完成了

這里有一個小問題就是,拿到的id可能很多個,getParentsById方法只能一個一個找父級id,所以需要依次獲取
二、單選賦值回顯
方法和多選類似,因為單選change選中的值是一位數(shù)組,比如:[ 1,11,111 ]所以當拿到后端id之后不需要太多處理,只需要根據(jù)id和數(shù)據(jù)拿到一個一維數(shù)組的數(shù)據(jù)就行了,就不多解釋了
let _depart_check = data.depart_id || "" let _arr = [] _arr = this.getParentsById(this.options, _depart_check ) this.depart_check = _arr
總結
以上就是el-cascader回顯失敗的解決辦法,可能有些小地方不夠嚴謹,但是大問題得到了解決。
到此這篇關于Element-UI中<el-cascader />回顯失敗問題的完美解決的文章就介紹到這了,更多相關el-cascader回顯失敗解決內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Element中el-date-picker組件不回填的情況
這篇文章主要介紹了解決Element中el-date-picker組件不回填的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue中根據(jù)時間戳判斷對應的時間(今天 昨天 前天)
這篇文章主要介紹了vue中 根據(jù)時間戳 判斷對應的時間(今天 昨天 前天),需要的朋友可以參考下2019-12-12
vue限制輸入數(shù)字或者保留兩位小數(shù)實現(xiàn)
這篇文章主要為大家介紹了vue限制輸入數(shù)字或者保留兩位小數(shù)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
在vue中使用Echarts利用watch做動態(tài)數(shù)據(jù)渲染操作
這篇文章主要介紹了在vue中使用Echarts利用watch做動態(tài)數(shù)據(jù)渲染操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

