element-ui 实现 全国省市区地址选择

这段代码展示了如何在Vue.js应用中创建一个省市区选择器,使用el-cascader组件从areaOptions数据绑定值和标签,同时还有一个输入框用于输入详细地址。

🚀 个人简介:某大型测绘遥感企业资深Webgis开发工程师,软件设计师(中级)、优快云优质创作者
💟 作 者:柳晓黑胡椒❣️
📝 专 栏:vue实践
🌈 若有帮助,还请关注点赞收藏,不行的话我再努努力💪💪💪

实现省市区选择器

<el-form-item label="公墓地址" prop="address">
   <el-cascader v-model="form.address" :options="areaOptions"placeholder="行政区划"
       :props="{value:'label'}">
     <template #default="{  data }">
       <span>{{ data.label }}</span>
     </template>
   </el-cascader>
 </el-form-item>
<el-form-item prop="detailedAddress" label-width="0">
  <el-input v-model="form.detailedAddress" placeholder="请输入详细地址" style="width: 100%"/>
</el-form-item>
<script>
import areaOptions from "@/assets/data/shengShiQuData";
</script>

省市区文件链接-shengShiQuData
在这里插入图片描述

Element UI 中,默认提供的 `el-cascader` 组件支持省市区三级联动,但并不直接支持四级联动(如省份、城市、区县、街道)。为了实现四级联动功能,需要自定义数据结构并扩展组件逻辑。 ### 实现步骤 #### 1. 自定义四级数据结构 Element UI 的 `element-china-area-data` 插件仅提供到三级区域(省--区),因此需要手动添加第四级(街道)的数据。可以使用公开的行政区划数据或从后端接口获取完整的四级数据。 示例数据格式: ```javascript [ { value: '110000', label: '北京市', children: [ { value: '110100', label: '市辖区', children: [ { value: '110101', label: '东城区', children: [ { value: '110101001', label: '景山街道' }, { value: '110101002', label: '东华门街道' } ] } ] } ] } ] ``` #### 2. 使用 `el-cascader` 实现四级联动 通过设置 `el-cascader` 的 `options` 属性为上述四级数据,并绑定 `v-model` 来获取选中值。 ```html <template> <div id="app"> <el-cascader :options="options" v-model="selectedOptions" @change="handleChange" ></el-cascader> </div> </template> ``` #### 3. 数据处理与回显 当选中一个四级地址时,`v-model` 会返回一个包含四个层级编码的数组,例如 `[110000, 110100, 110101, 110101001]`。可以通过 `CodeToText` 对象将这些编码转换为对应的汉字表示[^1]。 ```javascript methods: { handleChange(value) { let address = ''; if (value.length >= 4) { address = CodeToText[value[0]] + '/' + CodeToText[value[1]] + '/' + CodeToText[value[2]] + '/' + CodeToText[value[3]]; } else { // 处理未选择到街道的情况 } console.log(address); } } ``` #### 4. 回显已有地址数据 若需根据已有地址信息回显到 `el-cascader`,可通过 `TextToCode` 对象查找对应编码[^1]。 ```javascript const provinceCode = TextToCode['北京市'].code; const cityCode = TextToCode['北京市']['市辖区'].code; const districtCode = TextToCode['北京市']['市辖区']['东城区'].code; const streetCode = TextToCode['北京市']['市辖区']['东城区']['景山街道'].code; this.selectedOptions = [provinceCode, cityCode, districtCode, streetCode]; ``` #### 5. 引入本地数据 确保引入了 `element-china-area-data` 插件,并正确加载区域数据[^2]。 ```javascript import { regionData, CodeToText, TextToCode } from 'element-china-area-data'; ``` ### 注意事项 - **性能优化**:如果四级数据量庞大,建议采用懒加载方式动态获取子级数据。 - **兼容性**:确保浏览器支持现代 JavaScript 特性,或引入必要的 polyfill。 - **样式调整**:根据需求对 `el-cascader` 的弹出框大小进行适当调整,以适应四级选项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳晓黑胡椒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值