Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点

简介: Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点

必要准备

1. 查询行政区划的接口

可以使用提供的API  行政区域查询-API文档-开发指南-Web服务 API | 地图API

获取高德开发的key 的方法,详见博客  地图开发 —— 获取地图开发的 key_朝阳39的博客-CSDN博客_地图开发平台的key

2. 在 vue.config.js 中配置接口代理

// 访问高德地图的API
'/gaodeMapAPI': {
    target: 'https://restapi.amap.com',
    changOrigin: true,
    ws: true,  // 是否启用websockets
    secure: true,
    pathRewrite: {
        '^/gaodeMapAPI': ''
    }
},

范例1 —— 级联选择行政区划(可以选择任意一级)

要点

1. 使用懒加载   lazy: true

2. lazyLoad 函数中无法直接获取到this,所有需在 data(){} 函数中,使用  let that = this

3. 最终选中的结果为一个数组,内容依次是省、市、区的行政区划代码

4. 通过在  props 中添加 checkStrictly: true 实现级联单选,从而可以选择任意一级

5. 从接口中获取到的结果,需要转换成级联选择器需要的数据格式,值存入value,可见的内容存入 label,当 leaf 赋值为true 时,得到最后一级。

( 范例中的接口必须指定 leaf  为true 的条件 item.level === "district" ,否则可以无限级联选择  )

( 另外,因范例中的接口返回的街道数据的行政区划代码是其上级的区/县的行政区划代码,所以不支持级联选择到街道)

<template>
    <div style="padding: 20px">
        <p>当前选中的行政区划编码为: {{regionCodeList}}</p>
        <el-cascader  v-model="regionCodeList" :props="props"></el-cascader>
    </div>
</template>
<script>
    export default {
        data() {
            let that = this
            return {
                regionCodeList: [],
                props: {
                    // 单选
                    checkStrictly: true,
                    // 懒加载
                    lazy: true,
                    lazyLoad(node, resolve) {
                        that.$http.get("/gaodeMapAPI/v3/config/district", {
                            params: {
                                keywords: node.value,
                                subdistrict: '1',
                                key: 'f7c1ee410753e832aad78bc5cf135351'
                            }
                        })
                            .then(res => {
                                let nodes = res.data.districts[0].districts.map(item => {
                                    return {
                                        value: item.adcode,
                                        label: item.name,
                                        leaf: item.level === "district"
                                    }
                                })
                                resolve(nodes)
                            })
                    }
                }
            }
        },
    }
</script>
<style scoped>
</style>

范例2 —— 限制行政区划的显示和选择范围

需求

1. 默认选中深圳市

2. 不能选择省,但可以选择深圳市,或者深圳市内的区

3. 不显示广东省和深圳市之外的省和市

要点

1. v-model 绑定默认值,便能实现默认选中

2. 在添加 node 时,添加  disabled: true 便可使该节点不可选

3. 在添加 node 时,通过if 判断,过滤掉不显示的省和市

<template>
    <div style="padding: 20px">
        <p>当前选中的行政区划编码为: {{regionCodeList}}</p>
        <el-cascader v-model="regionCodeList" :props="props"></el-cascader>
    </div>
</template>
<script>
    export default {
        data() {
            let that = this
            return {
                regionCodeList: ["440000", "440300"],
                props: {
                    // 单选
                    checkStrictly: true,
                    // 懒加载
                    lazy: true,
                    lazyLoad(node, resolve) {
                        that.$http.get("/gaodeMapAPI/v3/config/district", {
                            params: {
                                keywords: node.value,
                                subdistrict: '1',
                                key: 'f7c1ee410753e832aad78bc5cf135351'
                            }
                        })
                            .then(res => {
                                let districtsList = res.data.districts[0].districts
                                let nodes = []
                                districtsList.forEach(item => {
                                    if ((item.level === "province") && (item.adcode === "440000")) {
                                        nodes.push(
                                            {
                                                value: item.adcode,
                                                label: item.name,
                                                disabled: true
                                            }
                                        )
                                    } else if ((item.level === "city") && (item.adcode === "440300")) {
                                        nodes.push(
                                            {
                                                value: item.adcode,
                                                label: item.name,
                                            }
                                        )
                                    } else if (item.level === "district") {
                                        nodes.push(
                                            {
                                                value: item.adcode,
                                                label: item.name,
                                                leaf: item.level === "district"
                                            }
                                        )
                                    }
                                })
                                resolve(nodes)
                            })
                    }
                }
            }
        },
    }
</script>
<style scoped>
</style>

范例3 —— 获取选中行政区划的名称

要点

1.  绑定 change 事件,触发获取行政区划信息的代码

<el-cascader ref="chooseRegionDom" @change="getRegionInfo"  v-model="regionCodeList" :props="props"></el-cascader>

3.  解析选中的节点(节点数组中下标为 0  的节点为选中的节点)

getRegionInfo(){
    // 获取选中的nodeList
    let nodeList = this.$refs.chooseRegionDom.getCheckedNodes()
    // 解析node的label 和 value
    this.$set(this.regionInfo,'regionName',nodeList[0].label)
    this.$set(this.regionInfo,'regionCode',nodeList[0].value)
}

目录
相关文章
|
5月前
|
Web App开发 前端开发 JavaScript
Element UI框架中自定义input组件的placeholder样式。
确保这些样式在你的应用程序CSS文件中定义,且该文件已正确加载到项目中。通过以上方法,可以控制Element UI组件中input的placeholder样式,使其满足特定的设计要求。这些更改都是基于CSS伪元素进行的,因此并不会对DOM结构产生改变,保持了原有结构的简洁和高效。
523 12
|
5月前
|
存储 JavaScript 前端开发
element ui <el-date-picker> 设置展示当前月
在 Element UI 中,使用 `el-date-picker` 的 `value-format` 属性可将日期值格式化为指定字符串。设置 `type=&quot;month&quot;` 时,绑定值默认为 Date 对象,通过 `value-format=&quot;yyyy-MM&quot;` 可将其转为如 &quot;2023-05&quot; 格式,便于存储与处理。
1177 0
|
存储
「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器
本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择,或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。
361 3
「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器
|
UED
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
本篇将带你实现一个滑动选择器应用,用户可以通过滑动条选择不同的数值,并实时查看选定的值和提示。这是一个学习如何使用 Slider 组件、状态管理和动态文本更新的良好实践。
206 1
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
1398 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
|
C# Android开发 开发者
Uno Platform 高级定制秘籍:深度解析与实践样式和模板应用,助你打造统一且高效的跨平台UI设计
【9月更文挑战第7天】Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 创建跨平台 UI 应用,覆盖 Windows、iOS、Android、macOS 和 WebAssembly。本文介绍 Uno Platform 中样式和模板的应用,助力开发者提升界面一致性与开发效率。样式定义控件外观,如颜色和字体;模板则详细定制控件布局。通过 XAML 定义样式和模板,并可在资源字典中全局应用或嵌套扩展。合理利用样式和模板能简化代码、保持设计一致性和提高维护性,帮助开发者构建美观高效的跨平台应用。
387 1
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
1048 0
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
1262 0
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
290 0
|
7月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
247 15

推荐镜像

更多
  • DNS