記錄--vue3 setup 中國省市區三級聯動options最簡潔寫法,無需任何庫

来源:https://www.cnblogs.com/smileZAZ/archive/2023/11/09/17822469.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在寫頁面的時候,發現表單裡面有一個省市區的 options 組件要寫,因為表單很多地方都會用到這個地址選擇,我便以為很簡單嘛。 雖然很簡單的一個功能,但是網路上能搜索到的教程大多都是需要配合 elementUI 等各種 UI 庫的,但是我 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

在寫頁面的時候,發現表單裡面有一個省市區的 options 組件要寫,因為表單很多地方都會用到這個地址選擇,我便以為很簡單嘛。

雖然很簡單的一個功能,但是網路上能搜索到的教程大多都是需要配合 elementUI 等各種 UI 庫的,但是我的項目並沒有使用這些 UI 庫,何況我只是想要拿到 一個地址字元串 而已,何必綁定 UI 庫呢?

1、地址三級聯動製作思路

思路其實很簡單:

1、一個地圖 json 數據

2、能夠拿到 省份、市、區 的 options 數組來綁定就可以了

3、選擇一個省份市,對應的市要變化;選擇市時,對應的區要變化

這樣的話,我們完全可以依賴 vue 強大的數據處理機制來解決

2、地圖json

地圖json數據我隨便搜了一個: 中國省市區數據

3、vue setup 語法糖寫法

我們點擊上面的鏈接,下載了地圖json數據,這裡選擇一個普通的就可以了,如圖:

 將文件命名為 area.json ,然後在項目中引入:

// 詳細地址(省市區 詳細地址)
import areaObj from '../../public/area.json';

第一步:首先是處理省份options數組(這裡json地圖是鍵名為省份):

// 省
const provinceArr = Object.keys(areaObj)
const province = ref(provinceArr[0])

這樣就拿到了一個省份數組,這裡隨機預設選中第一個,北京市,這裡 province 變數用來綁定輸入框的值

第二步:處理市的數據,關鍵就是使用計算屬性來監聽 省份的變化,省份一改變,市的數據也會跟著改變:

// 市
const cityArr = computed(() => {
    return Object.keys(areaObj[province.value])
})
const city = ref(cityArr.value[0])

// 監聽省份變化
watch(province, (newVal) => {
    city.value = Object.keys(areaObj[newVal])[0];
});

同樣,這裡的市預設選中第一個,city 也是雙向綁定到 輸入框, 為了能夠在頁面隨時響應式改變,添加了一個watch 監聽

第三步:處理區的數據

// 區
const areaArr = computed(() => {
    return areaObj[province.value][city.value]
})
const area = ref(areaArr.value[0])
// 監聽市變化
watch(city, (newVal) => {
    area.value = areaObj[province.value][newVal][0]
})

這裡同樣預設選中第一個,當市變化時,區也會切換到對應的市區數據

4、效果

完美!

這樣,就可以不藉助任何第三方UI庫,直接使用 vue 的計算屬性和監聽簡單解決地圖三級聯動問題,就是數據的處理而已

以下是完整的代碼:

其中 provinceArr、cityArr、areaArr 綁定options選項,province、city、area 綁定input 輸入框

import { ref, computed, watch } from 'vue';
// 詳細地址(省市區 詳細地址)
import areaObj from '../../../../public/area.json';

// 省
const provinceArr = Object.keys(areaObj)
const province = ref(provinceArr[6])
// 市
const cityArr = computed(() => {
    return Object.keys(areaObj[province.value])
})
const city = ref(cityArr.value[0])
// 監聽省份變化
watch(province, (newVal) => {
    city.value = Object.keys(areaObj[newVal])[0];
});
// 區
const areaArr = computed(() => {
    return areaObj[province.value][city.value]
})
const area = ref(areaArr.value[0])
// 監聽市變化
watch(city, (newVal) => {
    area.value = areaObj[province.value][newVal][0]
})

// 詳細地址
const detailArea = ref('')

本文轉載於:

https://juejin.cn/post/7297983578548355099

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 Welcome to YARP - 1.認識YARP並搭建反向代理服務 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 - 配置提供者(Configuration Providers) 2.3 - 配置過濾器(Confi ...
  • 一:背景 1. 講故事 這段時間分析了幾個和網路故障有關的.NET程式之後,真的越來越體會到電腦基礎課的重要,比如 電腦網路 課,如果沒有對 tcpip協議 的深刻理解,解決這些問題真的很難,因為你只能在高層做黑盒測試,你無法看到 tcp 層面的握手和psh通訊。 這篇我們通過兩個小例子來理解一 ...
  • FTP 介紹 FTP是File Transfer Protocol的縮寫,譯為文件傳輸協議,是基於CS結構的應用層協議。其主要作用是在網路上的兩台電腦之間傳輸文件。 FTP傳輸層使用的是TCP協議,它有一個很大的特點是採用雙埠的工作模式,即客戶端和服務端的通信是通過兩個通道進行的 命令通道用於服 ...
  • MySQL總共支持四種連接方式訪問資料庫,如下表格所示,其中Linux平臺環境下,主要有兩種連接方式,一種是TCP/IP連接方式,另外一種是socket方式。Name pipe和Share memory是Windows平臺下獨有的連接方式。 那麼,MySQL資料庫中,我們能否查看會話具體使用的連接方 ...
  • 近日,由天翼雲科技有限公司雲網產品事業部天璣實驗室撰寫的《關於公有雲區分負載QoS感知的記憶體資源動態超分管理優化》(Thoth:Provisioning Overcommitted Memory Resource with Differentiated QoS in Public Clouds)論文... ...
  • 本文分享自華為雲社區《Proxy下的Prepare透傳,讓GaussDB(for MySQL)更穩固,性能更卓越》,作者: GaussDB 資料庫 。 1.引言 在很多業務場景下,資料庫應用程式處理大量相同的SQL語句——只需更改SQL語句中的文字或變數值。例如:使用相同的SQL模板進行WHERE查 ...
  • 本文目標是:瞭解查詢的核心原理,對比 SQL 查詢優化技巧在 h2database 中的落地實現。前提:為了貼近實際應用,本文 Code Insight 基於 BTree 存儲引擎。 ...
  • 在構建數據倉庫或做數據分析時,需要對原始數據的結構進行一定的處理,有時涉及到“行轉列”,有時涉及到“列轉行”,那麼這兩個轉換的方式具體是什麼,有什麼差異,怎麼實現。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...