element級聯地址選擇器

一、實現過程總覽

  1. 組件替換:將原有的輸入框(el-input)替換為級聯選擇器(el-cascader),并配置基礎屬性。
  2. 數據適配:引入 JSON 地址數據,通過cascaderProps映射數據字段(如codelabelchildren)。
  3. 值轉換邏輯:處理選中值(code數組)與顯示值(地址字符串)的雙向轉換。
  4. 回顯功能:編輯時將存儲的地址字符串解析為級聯選擇器的選中狀態。
  5. 表單集成:確保級聯選擇器與表單驗證、提交邏輯無縫結合。

二、核心步驟與邏輯詳解

1. 組件替換與基礎配置
  • 模板修改
    將原el-input替換為el-cascader,綁定選中值cascaderValue和數據源areaList,并通過props配置數據映射
<el-form-item label="出差地址" prop="destination"><el-cascaderv-model="cascaderValue":options="areaList":props="cascaderProps"@change="handleCascaderChange"placeholder="請選擇省/市/區"></el-cascader>
</el-form-item>
  • 數據映射配置
    data() {return {cascaderProps: {value: 'code',   // 唯一標識字段(對應JSON中的code)label: 'label',  // 顯示名稱字段(對應JSON中的label)children: 'children' // 子級字段(對應JSON中的children)},areaList: areaList // 引入的JSON地址數據};
    }
    
2. 數據引入與初始化
  • 靜態數據引入

  • 將 JSON 地址數據保存為獨立文件(如@/utils/area-data.js),并在組件中引入:
    import { areaList } from '@/utils/area-data';
    
  • 組件初始化
    created鉤子中加載數據(若為動態接口需調用 API):
    created() {this.userId = this.$store.state.user.id;this.getList(); // 原有數據加載// 無需額外加載areaList,已作為靜態數據引入
    }
    
3. 選中值與地址字符串的雙向轉換
  • 選中值轉字符串(級聯選擇變化時)
    當用戶選擇地區時,將選中的code數組轉換為label拼接的字符串(如 “河北 石家莊”):

    methods: {handleCascaderChange(values) {const selectedLabels = this.getCascaderLabels(values); // 根據code找labelthis.form.destination = selectedLabels.join(' '); // 用空格拼接,可自定義分隔符},// 遞歸查找code對應的labelgetCascaderLabels(codes) {return codes.map(code => this.findAreaLabel(code, this.areaList));},findAreaLabel(code, areas) {for (const area of areas) {if (area.code === code) return area.label;if (area.children) return this.findAreaLabel(code, area.children);}return '';}
    }
    
  • 字符串轉回選中值(編輯回顯時)
    從接口獲取已有地址字符串(如 “河北 石家莊”),拆分為名稱數組后遞歸查找對應的code數組:

    handleUpdate(row) {// 原有邏輯...if (row.destination) {const names = row.destination.split(' '); // 按分隔符拆分成數組this.cascaderValue = this.findCodesByNames(names, this.areaList); // 名稱轉code}
    },
    findCodesByNames(names, areas, index = 0) {if (index >= names.length) return [];for (const area of areas) {if (area.label === names[index]) {const code = [area.code];if (index < names.length - 1 && area.children) {return code.concat(this.findCodesByNames(names, area.children, index + 1));}return code;}}return [];
    }
    
4. 表單驗證與提交
  • 驗證規則
    確保destination字段在表單驗證中必填,并依賴級聯選擇器的轉換邏輯:
    rules: {destination: [{ required: true, message: "出差目的地不能為空", trigger: "blur" }]
    }
    
  • 提交邏輯
    在表單提交前,確保destination已正確賦值(避免級聯選擇器未觸發change事件):
    submitForm() {this.$refs.form.validate(valid => {if (valid) {// 手動觸發轉換(如有必要)if (this.cascaderValue.length > 0 && !this.form.destination) {this.handleCascaderChange(this.cascaderValue);}// 調用接口提交數據(包含destination)}});
    }
    
5. 特殊情況處理
  • 直轄市 / 特別行政區
    如北京、上海等地區的children中存在同名label(如 “北京”),遞歸查找時會自動匹配二級數據,無需額外處理。
  • 層級深度
    數據結構為三級(省→市→區),級聯選擇器自動支持,無需配置層級深度。

三、關鍵邏輯總結

  1. 數據驅動:通過cascaderProps將 JSON 數據字段映射到級聯選擇器的標準接口,實現數據展示。
  2. 雙向綁定
    • cascaderValue存儲選中的code數組(模型層)。
    • form.destination存儲展示用的地址字符串(視圖層),通過handleCascaderChange實現雙向同步。
  3. 遞歸解析:利用遞歸函數實現codelabel、字符串與數組的相互轉換,適配三級地址結構。
  4. 無縫集成:級聯選擇器與若依項目的表單驗證、模態框、數據提交等功能完全集成,無需修改原有業務邏輯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83462.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【leetcode-兩數之和】

一、題目 二、題解 &#xff08;1&#xff09;雙指針 這里要注意j<length的 //聲明兩個指針int length nums.length;for (int i 0; i < length; i) {for (int j i 1; j<length;j){if (j<length && nums[i]nums[j]target){return new int[]{i,j};}}}r…

CLion社區免費后,使用CLion開發STM32相關工具資源匯總與入門教程

Clion下載與配置 Clion推出社區免費&#xff0c;就是需要注冊一個賬號使用&#xff0c;大家就不用去找破解版版本了&#xff0c;jetbrains家的IDEA用過的都說好&#xff0c;這里嵌入式領域也推薦使用。 CLion官網下載地址 安裝沒有什么特別&#xff0c;下一步就好。 啟動登錄…

Rust 學習筆記:關于 Cargo 的練習題

Rust 學習筆記&#xff1a;關于 Cargo 的練習題 Rust 學習筆記&#xff1a;關于 Cargo 的練習題問題一問題二問題三問題四問題五問題六問題七 Rust 學習筆記&#xff1a;關于 Cargo 的練習題 參考視頻&#xff1a; https://www.bilibili.com/video/BV1xjAaeAEUzhttps://www.b…

高速收發器

一、高速收發器 1.FPGA高速收發器&#xff1a;GTP,GTX,GTH,GTZ 2.每個Quad有4對高速收發器GT(4個TX和4個RX)和一個COmmon 3.走差分&#xff0c;提高抗干擾性 4.CPLL是每個lane私有的&#xff0c;QPLL是整個Quad的所有通道共享的 5.每個MGT的bank有兩對差分參考時鐘 6.CPLL的時鐘…

Rust 變量與可變性

文章目錄 變量與可變性常量遮蔽&#xff08;Shadowing&#xff09; 變量與可變性 Rust中變量默認是不可變的&#xff0c;這是 Rust 鼓勵你編寫更安全、易于并發代碼的眾多方式之一。不過&#xff0c;你仍然可以選擇讓變量可變。讓我們來探討 Rust 為什么鼓勵你優先使用不可變性…

sourcetree無法獲取遠程所有的tag

2025年5月29日11:30:17 sourcetree widnwos v3.4.23版本 突然發現線上的代碼庫里有很多新打的tag&#xff0c;但是sourcetree死活無法拉去所有的tag&#xff0c;嘗試卸載重新安裝也不行&#xff0c;全網也找了還是不知道&#xff0c;但是mac版本好像沒有這個問題 方法1&…

《深度探索C++對象模型》閱讀筆記(完整版)

《深度探索C對象模型》閱讀筆記&#xff08;完整版&#xff09; 文章目錄 《深度探索C對象模型》閱讀筆記&#xff08;完整版&#xff09;1. 關于對象&#xff08;Object Lessons&#xff09;1.1 C對象模型&#xff08;The C Object Model&#xff09;1.1.1 語言中的對象模型1.…

從Docker拉取鏡像一直失敗超時解決辦法

項目場景&#xff1a; 在ubuntu中&#xff0c;使用docker拉去鏡像時&#xff0c;一直超時&#xff0c;拉去失敗。 問題描述 原因分析&#xff1a; 國外服務器網絡不好導致。 解決方案&#xff1a; 解決方案1 設置國內源 我這邊測試&#xff0c;更改以后仍然失敗 阿里云提供…

KONG根據請求參數限流

背景 價格接口 /search 同時支持緩存查價和實時查價&#xff0c;主要通過searchType字段區分這兩種請求。 searchType 為空時為緩存查價&#xff0c;QPS很高。searchType 不為空時為實時查價&#xff0c;但QPS遠低于普通查價。 如果直接對該接口限流&#xff0c;當流量波動超…

通俗易懂解析:@ComponentScan 與 @MapperScan 的異同與用法

在 Spring 和 MyBatis 集成開發中&#xff0c;ComponentScan 和 MapperScan 是兩個核心注解&#xff0c;但它們的用途和工作機制截然不同。本文將通過通俗的語言和示例代碼&#xff0c;帶您輕松掌握它們的區別和使用方法。 一、基礎概念 ComponentScan&#xff1a;Spring 的“通…

39. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類(函數寫法)

39. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類&#xff08;函數寫法&#xff09; 一、異步業務函數解析 1.1 頁面導航函數 async def get(async_driver, url: str http://secure.smartbearsoftware.com/samples/testcomplete12/WebOrders/Login.aspx):await…

Qt 無邊框窗口實現拖動與窗口控制(最小化/最大化/關閉)

在 Qt 中&#xff0c;使用 Qt::FramelessWindowHint 可以創建無邊框窗口&#xff0c;但這樣會導致窗口無法拖動&#xff0c;并且系統默認的標題欄按鈕&#xff08;最小化、最大化、關閉&#xff09;也會消失。本文將介紹如何實現無邊框窗口的鼠標拖動功能&#xff0c;并添加自定…

Linux中的System V通信標準-共享內存、消息隊列以及信號量

在Linux系統中&#xff0c;System V IPC&#xff08;Inter-Process Communication&#xff09;提供了一系列進程間通信的機制&#xff0c;包括共享內存、消息隊列和信號量。這些機制在系統中發揮了重要作用&#xff0c;幫助進程之間進行數據交換和同步。本文將詳細介紹這些機制…

postman工具使用

基本功能操作 常用斷言 定義&#xff1a;postman 斷言借助 JavaScript - js 語言編寫代碼&#xff0c;自動判斷預期結果與實際結果是否一致。&#xff08; 注意斷言 代碼寫在 Tests 的標簽中&#xff09; 斷言響應狀態碼 斷言響應體是否包含某個字符串&#xff08;Response bo…

VBA數據庫解決方案二十:Select表達式From區域Where條件Order by

《VBA數據庫解決方案》教程&#xff08;版權10090845&#xff09;是我推出的第二套教程&#xff0c;目前已經是第二版修訂了。這套教程定位于中級&#xff0c;是學完字典后的另一個專題講解。數據庫是數據處理的利器&#xff0c;教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法…

算法-集合的使用

1、set常用操作 set<int> q; //以int型為例 默認按鍵值升序 set<int,greater<int>> p; //降序排列 int x; q.insert(x); //將x插入q中 q.erase(x); //刪除q中的x元素,返回0或1,0表示set中不存在x q.clear(); //清空q q.empty(); //判斷q是否為空&a…

C++文件和流基礎

C文件和流基礎 1. C文件和流基礎1.1 文件和流的概念1.2 標準庫支持1.3 常用文件流類ifstream 類ofstream 類fstream 類 2.1 打開文件使用構造函數打開文件使用 open() 成員函數打開文件打開文件的模式標志 2.2 關閉文件使用 close() 成員函數關閉文件關閉文件的重要性 3.1 寫入…

Maven---配置本地倉庫

目錄 5. 5.1在Maven路徑下新建文件夾用于本地倉庫存儲 5.2 復制本地倉庫路徑 5.3 找到配置文件路徑&#xff0c;使用VSCode方式打開 5.4 新增一行代碼 5.5 復制本地倉庫路徑&#xff0c;設置存儲路徑 5.1在Maven路徑下新建文件夾用于本地倉庫存儲 5.2 復制本地倉庫路徑 5…

Vue3 + Element Plus + TypeScript 中 el-cascader 實現模擬用戶點擊功能

模擬點擊&#xff0c;調用 el-cascader 的公開方法 togglePopperVisible 來展開下拉框 MaterialOut.vue <script setup lang"ts" name"MaterialOut"> ...... import { ElMessage, type ElCascader } from "element-plus";// 級聯組件實例…

新能源汽車與油車銷量

中國油車與新能源車銷量對比&#xff08;2022-2025年&#xff09; ?1. 市場份額演化&#xff08;2022-2025年&#xff09;? ?年份? ?新能源車銷量 &#xff08;滲透率&#xff09;? ?燃油車銷量 &#xff08;滲透率&#xff09;? ?關鍵事件? ?2022? 688.7萬輛…