vue+element多選級(jí)聯(lián)選擇器自定義props使用詳解
前言
我這里分享的是Cascader 級(jí)聯(lián)選擇器中的多選、以及如何自定義props的使用詳解
1.使用Cascader 級(jí)聯(lián)選擇器
效果
代碼
<div class="block"> <span class="demonstration">默認(rèn)顯示所有Tag</span> <el-cascader :options="options" :props="props" clearable></el-cascader> </div> <div class="block"> <span class="demonstration">折疊展示Tag</span> <el-cascader :options="options" :props="props" collapse-tags clearable></el-cascader> </div> <script> export default { data() { return { props: { multiple: true }, options: [{ value: 1, label: '東南', children: [{ value: 2, label: '上海', children: [ { value: 3, label: '普陀' }, { value: 4, label: '黃埔' }, { value: 5, label: '徐匯' } ] }, { value: 7, label: '江蘇', children: [ { value: 8, label: '南京' }, { value: 9, label: '蘇州' }, { value: 10, label: '無(wú)錫' } ] }, { value: 12, label: '浙江', children: [ { value: 13, label: '杭州' }, { value: 14, label: '寧波' }, { value: 15, label: '嘉興' } ] }] }, { value: 17, label: '西北', children: [{ value: 18, label: '陜西', children: [ { value: 19, label: '西安' }, { value: 20, label: '延安' } ] }, { value: 21, label: '新疆維吾爾族自治區(qū)', children: [ { value: 22, label: '烏魯木齊' }, { value: 23, label: '克拉瑪依' } ] }] }] }; } }; </script>
這里在優(yōu)化一下,將option放置外部引入,如果是通過(guò)后端傳入的數(shù)據(jù)這里也可以直接賦值給option
創(chuàng)建一個(gè)regin.js
const arr = [{ value: 1, label: '東南', children: [{ value: 2, label: '上海', children: [ { value: 3, label: '普陀' }, { value: 4, label: '黃埔' }, { value: 5, label: '徐匯' } ] }, { value: 7, label: '江蘇', children: [ { value: 8, label: '南京' }, { value: 9, label: '蘇州' }, { value: 10, label: '無(wú)錫' } ] }, { value: 12, label: '浙江', children: [ { value: 13, label: '杭州' }, { value: 14, label: '寧波' }, { value: 15, label: '嘉興' } ] }] }, { value: 17, label: '西北', children: [{ value: 18, label: '陜西', children: [ { value: 19, label: '西安' }, { value: 20, label: '延安' } ] }, { value: 21, label: '新疆維吾爾族自治區(qū)', children: [ { value: 22, label: '烏魯木齊' }, { value: 23, label: '克拉瑪依' } ] }] }] export default arr
頁(yè)面中使用
將rogin.js引入,然后在生命周期函數(shù)中賦值給options、這里如果數(shù)據(jù)是要通過(guò)后端傳輸?shù)脑捑驮谏芷诤瘮?shù)中去調(diào)用接口的方法、然后在將后端傳入的值賦給options。
<template> <div class="OrderDispose"> <div class="block"> <span class="demonstration">折疊展示Tag</span> <el-cascader :options="options" :props="props" collapse-tags clearable></el-cascader> </div> </div> </template> <script> import rogin from '@/assets/region' export default { data() { return { props: { multiple: true }, options: [] }; }, mounted(){ this.options = rogin } } </script> <style> .demonstration{ margin-right: 10px; } </style>
到這里就完成了級(jí)聯(lián)選擇器的初步使用
2.自定義props
先說(shuō)一下我遇到時(shí)的業(yè)務(wù)場(chǎng)景:
我需要渲染一個(gè)列表,但是這個(gè)列表里面的字段并不是value作為值、label為標(biāo)簽、子集也不是叫children
例如:
[{ regionValue: 1, regionLabel: '東南', child: [{ regionValue: 2, regionLabel: '上海', child: [ { regionValue: 3, regionLabel: '普陀' }, { regionValue: 4, regionLabel: '黃埔' }, { regionValue: 5, regionLabel: '徐匯' } ] }, { regionValue: 7, regionLabel: '江蘇', child: [ { regionValue: 8, regionLabel: '南京' }, { regionValue: 9, regionLabel: '蘇州' }, { regionValue: 10, regionLabel: '無(wú)錫' } ] }, { regionValue: 12, regionLabel: '浙江', child: [ { regionValue: 13, regionLabel: '杭州' }, { regionValue: 14, regionLabel: '寧波' }, { regionValue: 15, regionLabel: '嘉興' } ] }] }, { regionValue: 17, regionLabel: '西北', child: [{ regionValue: 18, regionLabel: '陜西', child: [ { regionValue: 19, regionLabel: '西安' }, { regionValue: 20, regionLabel: '延安' } ] }, { regionValue: 21, regionLabel: '新疆維吾爾族自治區(qū)', child: [ { regionValue: 22, regionLabel: '烏魯木齊' }, { regionValue: 23, regionLabel: '克拉瑪依' } ] }] }]
例如這種不是組件本身默認(rèn)值的字段
這個(gè)時(shí)候就需要使用自定義props
先看官方文檔的說(shuō)明
這里我們就是要用到value、label、children
先在組件中定義:props="props"
<el-cascader :options="options" :props="props" collapse-tags clearable></el-cascader>
然后修改data里面
data() { return { props: { multiple: true,label:'regionLabel',value:'regionValue',children:'child' }, options: [] }; },
然后在查看效果
成功!
那么問(wèn)題又來(lái)了,目前是必須要所有字段統(tǒng)一,簡(jiǎn)單來(lái)說(shuō)就是無(wú)論在哪一級(jí)菜單值必須要叫regionValue
,或者label
必須為標(biāo)簽,那如果數(shù)據(jù)長(zhǎng)成這樣呢
各級(jí)菜單的標(biāo)簽與值的字段都不一樣
例如:
const arr = [{ Value: 1, Label: '東南', child: [{ regionValue: 2, regionLabel: '上海', child: [ { regionValue: 3, regionLabel: '普陀' }, { regionValue: 4, regionLabel: '黃埔' }, { regionValue: 5, regionLabel: '徐匯' } ] }, { regionValue: 7, regionLabel: '江蘇', child: [ { regionValue: 8, regionLabel: '南京' }, { regionValue: 9, regionLabel: '蘇州' }, { regionValue: 10, regionLabel: '無(wú)錫' } ] }, { regionValue: 12, regionLabel: '浙江', child: [ { regionValue: 13, regionLabel: '杭州' }, { regionValue: 14, regionLabel: '寧波' }, { regionValue: 15, regionLabel: '嘉興' } ] }] }, { Value: 17, Label: '西北', child: [{ regionValue: 18, regionLabel: '陜西', child: [ { regionValue: 19, regionLabel: '西安' }, { regionValue: 20, regionLabel: '延安' } ] }, { regionValue: 21, regionLabel: '新疆維吾爾族自治區(qū)', child: [ { regionValue: 22, regionLabel: '烏魯木齊' }, { regionValue: 23, regionLabel: '克拉瑪依' } ] }] }]
一級(jí)菜單與二級(jí)菜單的值分別顯示為Value
、regionValue
,標(biāo)簽為Label
、regionLabel
,這種字段不一的情況會(huì)導(dǎo)致其中一個(gè)顯示有問(wèn)題。
如果以一級(jí)菜單的字段做匹配的話,那么二級(jí)菜單就會(huì)不顯示,這個(gè)時(shí)候就需要對(duì)數(shù)據(jù)進(jìn)行二次處理,目的是把所有級(jí)的字段統(tǒng)一比如說(shuō)值就是顯示為value
,標(biāo)簽就是為label
。
定義一個(gè)方法為disposeData,并且在生命周期函數(shù)中掛載,我用的方法是將一級(jí)菜單為匹配字段,將二級(jí)的字段全部替換為一級(jí)菜單
disposeData(){ let children = [] this.options.forEach((item,index) => { item.child.forEach((Item,Index) => { children[Index] = {"Value" : Item.regionValue,"Label" : Item.regionLabel} }) this.options[index] = {"Value":item.Value,"Label":item.Label,"child":children} }) }
再看看效果
成功!
完整代碼
<template> <div class="OrderDispose"> <div class="block"> <span class="demonstration">折疊展示Tag</span> <el-cascader :options="options" :props="props" collapse-tags clearable></el-cascader> </div> </div> </template> <script> import rogin from '@/assets/region' export default { data() { return { props: { multiple: true,label:'Label',value:'Value',children:'child' }, options: [] } }, methods:{ disposeData(){ let children = [] this.options.forEach((item,index) => { item.child.forEach((Item,Index) => { children[Index] = {"Value" : Item.regionValue,"Label" : Item.regionLabel} }) this.options[index] = {"Value":item.Value,"Label":item.Label,"child":children} }) } }, mounted(){ this.options = rogin this.disposeData() } } </script>
總結(jié)
到此這篇關(guān)于vue+element多選級(jí)聯(lián)選擇器自定義props使用的文章就介紹到這了,更多相關(guān)vue+element多選級(jí)聯(lián)選擇器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue element Cascader級(jí)聯(lián)選擇器解決最后一級(jí)顯示空白問(wèn)題
- vue element-ui el-cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯的兩種實(shí)現(xiàn)方法
- vue項(xiàng)目element-ui級(jí)聯(lián)選擇器el-cascader回顯的問(wèn)題及解決
- Vue之Element級(jí)聯(lián)選擇器多選傳值以及回顯方式(樹形結(jié)構(gòu))
- vue?ElementUI級(jí)聯(lián)選擇器回顯問(wèn)題解決
- vue如何實(shí)現(xiàn)級(jí)聯(lián)選擇器功能
相關(guān)文章
一篇文章告訴你Vue3指令是如何實(shí)現(xiàn)的
在計(jì)算機(jī)技術(shù)中,指令是由指令集架構(gòu)定義的單個(gè)的CPU操作,在更廣泛的意義上,“指令”可以是任何可執(zhí)行程序的元素的表述,例如字節(jié)碼,下面這篇文章主要給大家介紹了關(guān)于Vue3指令是如何實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-01-01vue前端實(shí)現(xiàn)login頁(yè)登陸驗(yàn)證碼代碼示例
現(xiàn)在我們管理后臺(tái)有個(gè)需求,就是登錄頁(yè)面需要獲取驗(yàn)證碼,用戶可以輸入驗(yàn)證碼后進(jìn)行登錄,這篇文章主要給大家介紹了關(guān)于vue前端實(shí)現(xiàn)login頁(yè)登陸驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下2024-05-05element日歷calendar組件上月、今天、下月、日歷塊點(diǎn)擊事件及模板源碼
這篇文章主要介紹了element日歷calendar組件上月、今天、下月、日歷塊點(diǎn)擊事件及模板源碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07基于Vue實(shí)現(xiàn)HTML轉(zhuǎn)PDF并導(dǎo)出
這篇文章主要為大家介紹了三種方法,可以實(shí)現(xiàn)將HTML頁(yè)面轉(zhuǎn)為PDF并實(shí)現(xiàn)下載。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04vue實(shí)現(xiàn)手機(jī)驗(yàn)證碼登錄
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)手機(jī)驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11