利用vue+elementUI設(shè)置省市縣三級(jí)聯(lián)動(dòng)下拉列表框的詳細(xì)過(guò)程
前言
在前端項(xiàng)目開(kāi)發(fā)中,經(jīng)常會(huì)遇到省市縣三級(jí)聯(lián)動(dòng)的下拉列表框組的問(wèn)題,分享以下實(shí)現(xiàn)方法,以下內(nèi)容為具體的實(shí)現(xiàn)過(guò)程:
實(shí)現(xiàn)過(guò)程
1.靜態(tài)頁(yè)面組件搭建:使用elementUI的form表單,并做一下基本的修改,得到以下結(jié)果:

2.然后是組件的數(shù)據(jù)配置:

表單的基本數(shù)據(jù)存放在form對(duì)象里面,至于省市縣三個(gè)下拉菜單的數(shù)據(jù),則以數(shù)組的形式存放,分別為provinceList[];cityList[];countyListp[]。
3.接下來(lái)處理重點(diǎn)數(shù)據(jù):三級(jí)下拉菜單的聯(lián)動(dòng):
3.1點(diǎn)擊省下拉菜單獲取省份:

主要技術(shù)點(diǎn)在于:通過(guò)調(diào)取百度地圖的API接口,獲取全國(guó)省市縣行政區(qū)劃:
this.$http({
method:"get",
url:"https://restapi.amap.com/v3/config/district?parameters",
params:{
key:"3a708a4ef5e3af28694b1c861985a5ce",
keyWords:"中國(guó)",
subdistrict:3
}
}).then((res)=>{
this.form.provinceList = res.data.districts[0].districts /* 省*/
/* 進(jìn)行遍歷賦值*/
/* 市區(qū)和縣區(qū)*/
let newProvince = this.form.provinceList
for(let i = 0; i < newProvince.length; i++){ /* 省級(jí)*/
for(let j = 0; j < newProvince[i].districts.length; j++){ /* 市級(jí)*/
let city = newProvince[i].districts[j].name
this.CITY.push({id:j+1,name:city,code:i+1})
for(let k = 0;k<newProvince[i].districts[j].districts.length; k++){/* 縣級(jí)*/
let xian = newProvince[i].districts[j].districts[k].name
this.XIAN.push({id:k+1,name:xian,code:j+1,cityCountyName:city})
}
}
}
for(let m = 0; m < newProvince.length;m++){
newProvince[m] = {...newProvince[m],...{code:m+1}}
}
this.form.provinceList = newProvince
})上述代碼的作用:在 獲取百度地圖提供的行政區(qū)劃后,對(duì)這些行政區(qū)劃樹(shù)進(jìn)行初始化,主要是給選各個(gè)省份匹配其對(duì)應(yīng)的市和縣級(jí)行政區(qū)。
接下來(lái)的操作就是點(diǎn)擊選擇省份就可以獲取其對(duì)應(yīng)的 市級(jí)行政區(qū),點(diǎn)擊選擇市級(jí)下拉菜單就可以獲取其對(duì)應(yīng)的縣級(jí)行政區(qū),代碼如下:
根據(jù)選中省,匹配市:
provinceChange(that){
// 根據(jù)選中省,匹配市
let cityCode = 0
let newCityArry = []
this.form.provinceList.forEach((item,index)=>{
if(item.name == that){
cityCode = item.code
}
})
// console.log(cityCode)
if(cityCode){
this.form.cityList = []
this.CITY.forEach((item,index)=>{
if(item.code == cityCode){
this.form.cityList.push(item)
}
}) /* 市匹配成功*/
}
},// 根據(jù)市區(qū),匹配縣區(qū)
cityChange(that){
let countyCode = 0
let cityname = ''
let newCountyArry = []
this.form.cityList.forEach((item,index)=>{
if(item.name == that){
countyCode = item.id
cityname = item.name
}
})
if(countyCode){
this.form.countyList = []
this.XIAN.forEach((item,index)=>{
if(item.code == countyCode && item.cityCountyName == cityname){
this.form.countyList.push(item)
}
})
}
},做了這些程序配置后,就可以實(shí)現(xiàn)三級(jí)下拉菜單的聯(lián)動(dòng)了。效果圖如下

總結(jié)
到此這篇關(guān)于利用vue+elementUI設(shè)置省市縣三級(jí)聯(lián)動(dòng)下拉列表框的文章就介紹到這了,更多相關(guān)vue+elementUI省市縣三級(jí)聯(lián)動(dòng)下拉列表框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文快速學(xué)會(huì)阻止事件冒泡的4種方法(原生js阻止,vue中使用修飾符阻止)
冒泡就是事件開(kāi)始是由最具體的元素接收,然后逐層向上級(jí)傳播到較為不具體的元素,這篇文章主要給大家介紹了關(guān)于阻止事件冒泡的4種方法,文中介紹的方法分別是原生js阻止以及vue中使用修飾符阻止的相關(guān)資料,需要的朋友可以參考下2023-12-12
解決Vue3.0刷新頁(yè)面警告[Vue Router warn]:No match 
這篇文章主要介紹了解決Vue3.0刷新頁(yè)面警告[Vue Router warn]:No match found for location with path /xxx問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue的雙向數(shù)據(jù)綁定實(shí)現(xiàn)原理解析
這篇文章主要介紹了Vue的雙向數(shù)據(jù)綁定實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
vue實(shí)現(xiàn)父子組件之間的通信以及兄弟組件的通信功能示例
這篇文章主要介紹了vue實(shí)現(xiàn)父子組件之間的通信以及兄弟組件的通信功能,結(jié)合實(shí)例形式分析了vue.js組件間通信相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
一文搞懂vue中provide和inject實(shí)現(xiàn)原理對(duì)抗平庸
這篇文章主要為大家介紹了vue中provide和inject實(shí)現(xiàn)原理的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Vue.js中該如何自己維護(hù)路由跳轉(zhuǎn)記錄
這篇文章主要給大家介紹了關(guān)于Vue.js中該如何自己維護(hù)路由跳轉(zhuǎn)記錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

