最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用vue2實(shí)現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動(dòng)效果

 更新時(shí)間:2018年11月05日 08:50:09   作者:月光光  
我們知道省市區(qū)縣都有名稱和對應(yīng)的數(shù)字唯一編號,使用編號可以更方便查詢以及程序處理,我們今天來了解一下使用vue2來實(shí)現(xiàn)常見的省市區(qū)下拉聯(lián)動(dòng)選擇效果,需要的朋友可以參考下

我們知道省市區(qū)縣都有名稱和對應(yīng)的數(shù)字唯一編號,使用編號可以更方便查詢以及程序處理,我們今天來了解一下使用vue2來實(shí)現(xiàn)常見的省市區(qū)下拉聯(lián)動(dòng)選擇效果。

準(zhǔn)備數(shù)據(jù)源

我們的省市區(qū)縣的數(shù)據(jù)源來自本站文章 《基于Vue2的簡易的省市區(qū)縣三級聯(lián)動(dòng)組件》 中的districts.js,感謝 v-distpicker 作者。districts.js中的數(shù)據(jù)格式大概是這樣的:

export default {
 100000: {
 110000: '北京市',
 120000: '天津市',
 130000: '河北省',
 140000: '山西省',
 ...
 },
 130000: {
 130100: '石家莊市',
 130200: '唐山市',
 130300: '秦皇島市',
 130400: '邯鄲市',
 ...
 },
 130100: {
 130102: '長安區(qū)',
 130104: '橋西區(qū)',
 130105: '新華區(qū)',
 130107: '井陘礦區(qū)',
 ...
 },
 ...
}

很顯然,districts.js導(dǎo)出的是一個(gè)key:value形式的json數(shù)據(jù)串,那么在js中我們就可以很方便的處理json數(shù)據(jù)串中的關(guān)系。

構(gòu)建項(xiàng)目

我們使用vue-cli構(gòu)建項(xiàng)目,需要安裝node和vue環(huán)境。然后命令行運(yùn)行: vue init webpack distpicker 構(gòu)建好項(xiàng)目工程。具體如何操作的請參照vue官網(wǎng),這些基礎(chǔ)的本文不細(xì)講。

現(xiàn)在我們直接編輯App.vue文件。

<template>
 <div id="app" class="container">
 <div class="demo form-inline">
  <select name="province" class="form-control" v-model="province.code" @change="getCitys">
   <option value="">選擇省份</option>
   <option v-for="(item, index) in provinceList"
    :value="index"
    :key="index">
   {{ item }}
   </option>
  </select>
  <select name="city" class="form-control" v-show="showcitys" v-model="city.code" @change="getAreas">
   <option value="">選擇城市</option>
   <option v-for="(item, index) in cityList"
    :value="index"
    :key="index">
   {{ item }}
   </option>
  </select>
  <select name="area" class="form-control" v-show="showareas" v-model="area.code" @change="getDistValue">
   <option value="">選擇區(qū)縣</option>
   <option v-for="(item, index) in areaList"
    :value="index"
    :key="index">
   {{ item }}
   </option>
  </select>
  <button class="btn btn-info" @click="getSelectVal">獲取選中值</button>
  <div style="margin-top:20px;color:red">{{selected}}</div>
 </div>
 </div>
</template>

這是一個(gè)簡單三個(gè)下拉選擇器模板,使用 v-model 可以設(shè)置默認(rèn)值, @change 當(dāng)下拉選擇選項(xiàng)后觸發(fā)的事件。然后每個(gè) select 下的 option 是讀取districts.js對應(yīng)的數(shù)據(jù)。

JS代碼

我們現(xiàn)在來看JS部分,首先使用import導(dǎo)入省市區(qū)縣數(shù)據(jù),注意我們把districts.js文件放在項(xiàng)目的src目錄下,然后定義默認(rèn)編號100000,因?yàn)槲覀兊谝粋€(gè)(省級)選擇框默認(rèn)要下拉顯示所有的省/自治區(qū)/直轄市。然后在 data()部分設(shè)置變量。最后把 created()methods 部分的代碼加上,完整的代碼如下:

import DISTRICTS from './districts';
const DEFAULT_CODE = 100000;
export default {
 name: 'App',
 data() {
  return {
   showcitys: false,
   showareas: false,
   selected: '',
   defaultProvince: '湖南省',
   defaultCity: '長沙市',
   defaultArea: '岳麓區(qū)',
   province: {},
   city: {},
   area: {},
   provinceList: [],
   cityList: [],
   areaList: []
  }
 },
 created() {
  this.provinceList = this.getDistricts();
  this.getDefault();
 },
 
 methods: {
  getDefault() {
   if (this.defaultProvince !== '') {
    this.showcitys = true;
    let provinceCode = this.getAreaCode(this.defaultProvince);
    this.cityList = this.getDistricts(provinceCode);
    this.province = {
     code: provinceCode,
     value: this.defaultProvince
    }
   }
   
   if (this.defaultCity !== '') {
    this.showareas = true;
    let cityCode = this.getAreaCode(this.defaultCity);
    this.areaList = this.getDistricts(cityCode);
    this.city = {
     code: cityCode,
     value: this.defaultCity
    }
   }
 
   if (this.defaultArea !== '') {
    let areaCode = this.getAreaCode(this.defaultArea);
    this.area = {
     code: areaCode,
     value: this.defaultArea
    }
   }
  },
  getSelectVal() {
   this.selected = this.province.value + this.city.value + this.area.value;
   console.log(this.province.code + '-'+ this.city.code + '-' + this.area.code);
  },
  
  //名稱轉(zhuǎn)代碼
  nameToCode(name) {
   for(let x in DISTRICTS) {
   for(let y in DISTRICTS[x]) {
    if(name === DISTRICTS[x][y]) {
    return y
    }
   }
   }
  },
  //獲取區(qū)域代碼
  getAreaCode(value) {
   if(typeof value === 'string') {
   return this.nameToCode(value);
   }

   return value;
  },
  
  getCodeValue(code, level=1) {
   if (level == 1) { //省級
    return DISTRICTS[DEFAULT_CODE][code];
    
   } else if (level == 2) {
    let provinceCode = this.province.code;
    return DISTRICTS[provinceCode][code];
  
   } else { //
    let cityCode = this.city.code;
    return DISTRICTS[cityCode][code];
   }
  },
  getDistricts(code = DEFAULT_CODE) {
   return DISTRICTS[code] || []
  },
  
  cleanList(name) {
   this[name] = []
  },
  getCitys(e) {
   this.cityList = this.getDistricts(e.target.value);

   this.cleanList('areas')
   this.province = this.setData(e.target.value, 1);
   this.areaList = [];
   this.showareas = false;
   this.showcitys = true;
  },
  getAreas (e) {
   this.areaList = this.getDistricts(e.target.value);
   this.city = this.setData(e.target.value, 2);
   this.showareas = true;
  },
  getDistValue (e) {
   this.area = this.setData(e.target.value, 3);
  },
  setData(code, level = 1) {
   code = parseInt(code);
   return {
    code: code,
    value: this.getCodeValue(code, level),
   }
  },

 }
}

運(yùn)行

我們需要實(shí)現(xiàn)的效果是:默認(rèn)顯示省級下拉選擇框,下拉選項(xiàng)中應(yīng)該默認(rèn)載入省級名稱,然后當(dāng)選擇省級下拉框中的省份列表(省級)選項(xiàng)時(shí),顯示選中省份的城市列表(市級),然后選擇市級城市選項(xiàng),顯示選擇城市的區(qū)縣列表(縣級)。在選擇完每個(gè)選項(xiàng)時(shí),我們應(yīng)該即時(shí)記錄選項(xiàng)對應(yīng)的編號和名稱。如果在 data() 部分設(shè)置了省市區(qū)縣的默認(rèn)值,則三個(gè)下拉框都要顯示。

運(yùn)行 npm run dev ,在瀏覽器中輸入http://localhost:8080查看效果。

效果是實(shí)現(xiàn)了,但是如果要在一個(gè)頁面調(diào)用多個(gè)三級聯(lián)動(dòng)效果則就比較尷尬了,下節(jié)我給大家講述如何把這個(gè)三級聯(lián)動(dòng)效果封裝成vue組件,造好輪子,方便在更多地方調(diào)用,敬請關(guān)注。

總結(jié)

以上所述是小編給大家介紹的使用vue2實(shí)現(xiàn)帶地區(qū)編號和名稱的省市縣三級聯(lián)動(dòng)效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue3+Vite項(xiàng)目使用less的實(shí)現(xiàn)步驟

    Vue3+Vite項(xiàng)目使用less的實(shí)現(xiàn)步驟

    最近學(xué)習(xí)在vite項(xiàng)目中配置less,本文主要介紹了Vue3+Vite項(xiàng)目使用less的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • vue實(shí)現(xiàn)監(jiān)聽localstorage值變化

    vue實(shí)現(xiàn)監(jiān)聽localstorage值變化

    這篇文章主要介紹了vue實(shí)現(xiàn)監(jiān)聽localstorage值變化,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue編寫炫酷的時(shí)鐘插件

    Vue編寫炫酷的時(shí)鐘插件

    這篇文章主要為大家詳細(xì)介紹了Vue編寫炫酷的時(shí)鐘插件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • vue.js使用watch監(jiān)聽路由變化的方法

    vue.js使用watch監(jiān)聽路由變化的方法

    這篇文章主要介紹了vue.js使用watch監(jiān)聽路由變化的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 一文詳解Vue.js生產(chǎn)環(huán)境文件及優(yōu)化策略

    一文詳解Vue.js生產(chǎn)環(huán)境文件及優(yōu)化策略

    隨著 Vue.js 在前端開發(fā)中的普及,如何高效地將 Vue 項(xiàng)目部署到生產(chǎn)環(huán)境成為了開發(fā)者關(guān)注的重點(diǎn),本文將詳細(xì)解析 Vue.js 生產(chǎn)環(huán)境文件的使用方法、優(yōu)缺點(diǎn)以及優(yōu)化策略,需要的朋友可以參考下
    2024-12-12
  • Vue3中插槽slot的使用方法詳解

    Vue3中插槽slot的使用方法詳解

    在Vue?3中,插槽(slot)是一種強(qiáng)大的內(nèi)容分發(fā)API,它允許組件的模板開發(fā)者定義一種插槽,下面就跟隨小編一起來學(xué)習(xí)一下它的具體使用吧
    2024-11-11
  • 詳解vue如何封裝封裝一個(gè)上傳多張圖片的組件

    詳解vue如何封裝封裝一個(gè)上傳多張圖片的組件

    上傳圖片不管是后臺(tái)還是前端小程序,上傳圖片都是一個(gè)比不可少的功能有時(shí)候需要好幾個(gè)頁面都要上傳圖片,每個(gè)頁面都寫一個(gè)非常不方便,本文就給大家介紹vue如何封裝一個(gè)上傳多張圖片的組件,需要的朋友可以參考下
    2023-07-07
  • vue里使用create,mounted調(diào)用方法的正確姿勢說明

    vue里使用create,mounted調(diào)用方法的正確姿勢說明

    這篇文章主要介紹了vue里使用create,mounted調(diào)用方法的正確姿勢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解Axios 如何取消已發(fā)送的請求

    詳解Axios 如何取消已發(fā)送的請求

    這篇文章主要介紹了詳解Axios 如何取消已發(fā)送的請求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Vue.js狀態(tài)管理之Pinia與Vuex詳解

    Vue.js狀態(tài)管理之Pinia與Vuex詳解

    Pinia和Vuex一樣都是是vue的全局狀態(tài)管理器,其實(shí)Pinia就是Vuex5,只不過為了尊重原作者的貢獻(xiàn)就沿用了名字Pinia,下面這篇文章主要給大家介紹了關(guān)于Vue.js狀態(tài)管理之Pinia與Vuex的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論

星子县| 昭通市| 胶南市| 济宁市| 宁强县| 息烽县| 丘北县| 翼城县| 临湘市| 乌海市| 朝阳区| 沁源县| 巫溪县| 永定县| 元谋县| 定襄县| 通州市| 怀安县| 余庆县| 崇左市| 枞阳县| 永宁县| 固镇县| 廉江市| 海淀区| 尼木县| 全椒县| 拜城县| 手游| 威信县| 邵阳县| 蓬溪县| 苍溪县| 专栏| 丽江市| 司法| 雷山县| 盐亭县| 沈丘县| 宁阳县| 凌海市|