ElementUI 的 Cascader 級聯選擇器我的以爲很好用,可是對 :options="options" 裏的數據格式是有特定要求的:input 框顯示的值是 options 裏的 label 值。若是 options 的鍵值對不是 value label ,就須要 props 來配置。html
如何配置 value label?
<el-cascader v-model="data" :options="options" placeholder="請選擇" :props="{ value: 'id', label: 'name'}" @change="handlechange"> </el-cascader>
js:
export default {
data() {
options:[
{ id: 1, name: '第一層', children: [ id: 11, name: '水果']},
{ id: 2, name: '第二層', children: [ id: 22, name: '蔬菜'] },
]
}
}
頁面顯示:node
第一層/水果數組
orspa
第二層/蔬菜code
注意 @change 事件:若是選擇的是 「第一層/水果」,console.log(value) 輸出的值爲 [1, 11]。htm
因此,若是須要拿到數據反顯內容的需求,則須要後臺返回 value 的數組,賦值給 v-model 的 data。blog
handlechange (value) { console.log(value) // 這裏的值會輸出 value 的一個數組 }
講兩個遇到的坑:
一、自定義節點時,可能會遇到這樣的寫法:slot-scope="{ node, data }" 這種寫法在 IE 中會報錯,詳情及解決方法見另外一篇博文 Vue IE11 報錯 Failed to generate render function:SyntaxError: 缺乏標識符 in事件
<el-cascader :options="options"> <template slot-scope="{ node, data }"> <span>{{ data.label }}</span> <span> ({{ data.children.length }}) </span> </template> </el-cascader>
二、不要天真的在 <template> 下的標籤上綁定 click 等事件,由於頁面渲染出來的元素(好比上段代碼中的 <span>),佔位面積不是一整行,若是你點擊的是綠色箭頭部分,是沒有獲取到它的 value 值,因此最好按照官方文檔推薦的寫法,在 <el-cascader> 上綁定 change。固然能夠調 <span> 的樣式,可是太過於麻煩。文檔