记录--vue3 setup 中国省市区三级联动options最简洁写法,无需任何库

news2024/12/25 12:35:31

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

在写页面的时候,发现表单里面有一个省市区的 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

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1196271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上拉电阻与下拉电阻

文章目录 上拉电阻下拉电阻上下拉电阻作用1、稳定信号2、减少电磁干扰3、提高驱动能力 大家在玩单片机的过程中,一定没少听过上拉电阻和下拉电阻这组名词,那么到底什么是上拉电阻和下拉电阻呢?今天我们一起来简单了解一下 上拉电阻 上拉电阻…

激光雷达标定板是自动驾驶系统中关键部件

中国政府制定了多项产业发展规划,包括《汽车产业中长期发展规划》和《新一代人工智能发展规划》等,旨在推动汽车产业的转型升级,培育具有国际竞争力的汽车品牌,同时鼓励企业加大对自动驾驶技术研发的投入,加快自动驾驶…

目标检测算法改进系列之Backbone替换为VanillaNet

VanillaNet简介 简介:VanillaNet是一种在设计中融入优雅的神经网络架构,通过避免高深度,shortcut和自注意力等复杂操作,VanillaNet简单而强大。每一层都经过精心制作,紧凑而直接,在训练后对非线性激活函数…

医学图像 ABIDE 等数据集 .nii.gz Python格式化显示

nii.gz 文件 .nii.gz 文件通常是医学影像数据的一种常见格式,比如神经影像(如脑部MRI)。这种文件格式通常是经过gzip压缩的NIfTI格式(Neuroimaging Informatics Technology Initiative)。 要在Python中查看.nii.gz文…

初学前端CSS教案(理论+代码+效果图)

文章目录: 一:前言 1.什么是CSS呢? 2.环境 3.HTML5相关 4.瞅瞅CSS代码样式什么样? 二:编码规范 1.声明 2.注释 3.选择器 3.1 块元素选择器{} 3.2 id选择器 " # " 3.3 class选择器 " . &quo…

说说你对React Router的理解?常用的Router组件有哪些?

一、是什么 react-router等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面 路由的本质就是页面的URL发生改变时,页面的显示结果可以根据URL的变化而变化,但是页面不会刷新 因此,可以通过前端路由可以实现单…

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中,它通常用于管理和操作版本控制系统(如Git、SVN等)以及代码开发环境(如IDE)。与…

Leetcode刷题详解——单词搜索

1. 题目链接:79. 单词搜索 2. 题目描述: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的…

python 对全局变量的修改,需要使用global关键字

is_debug Falsedef get_is_debug():return is_debugdef set_is_debug(dbg):global is_debugis_debug dbg代码review的时候有个同事(我们主要都是开发c代码的,python也会写,但是用的少)说,set_is_debug函数中 is_debu…

自动驾驶算法(十):多项式轨迹与Minimun Snap闭式求解原理及代码讲解

目录 1 多项式轨迹与Minimun Snap闭式求解原理 2 代码解析 1 多项式轨迹与Minimun Snap闭式求解原理 我们上次说的Minimun Snap,其实我们就在求一个二次函数的最优解: 也就是优化函数在约束下的最小值。 但这是一个渐进最优解而不是解析最优解&#xf…

LeetCode16的最接近的三数之和

目录 优化解法暴力搜索 优化解法 看了题解之后的根据题解的意思编写的优化解法,感觉还行,代码算是比较简短了,没有复杂的逻辑,就是写的时候总是只记得记录那个sum,忘记要记录最小的差值,更新min_minus. class Solution {public int threeSumClosest(int[] nums, int target) {…

ros1 基础学习08- 实现Server端自定义四 Topic模式控制海龟运动

一、服务模型 Server端本身是进行模拟海龟运动的命令端,它的实现是通过给海龟发送速度(Twist)的指令,来控制海龟运动(本身通过Topic实现)。 Client端相当于海龟运动的开关,其发布Request来控制…

PACD管理循环

目录 一、何谓管理? 二、PDCA构成 三、解读PDCA 四、总结 一、何谓管理? 1、所谓管理:是指利用拥有的资源,设定计划,并为达到此计划之一切活动的全体。 2、管理是由维持(SDCA)及改善(PDCA)这两个轮子构成。维持是…

数据分析实战 | 泊松回归——航班数据分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 一、数据及分析对象 CSV文件:o-ring-erosion-only.csv 数据集链接:https://download.csdn.net/download/m0_7…

什么是证书管理

在自带设备和物联网文化的推动下,数字化使连接到互联网的设备数量空前加速。在企业网络环境中,每个在线运行的设备都需要一个数字证书来证明其合法性和安全运行。这些数字证书(通常称为 X.509 证书)要么来自称为证书颁发机构 &…

《013.Springboot+vue之旅游信息推荐系统》【前后端分离有开发文档】

《013.Springbootvue之旅游信息推荐系统》【前后端分离&有开发文档】 项目简介 [1]本系统涉及到的技术主要如下: 推荐环境配置:idea jdk1.8 maven MySQL 前后端分离; 后台:SpringBootMybatisMySQL; 前台:Vue; [2]功能模块展…

ScrollView 与 SliverPadding 的关系

基本页面布局 Scaffold 中有个 ListView&#xff0c;ListView 中有 100 个高 50 的 Container 用作辅助观看&#xff0c;ListView 中第三个元素是一个 GridView&#xff0c;GridView 的滑动效果被禁止。 class GiveView extends GetView<GiveController> {const GiveVi…

振南技术干货集:研发版本乱到“妈不认”? Git!(2)

注解目录 1、关于 Git 1.1Git 今生 (Git 和 Linux 的生父都是 Linus&#xff0c;振南给你讲讲当初关于 Git 的爱恨情愁&#xff0c;其背后其实是开源与闭源两左阵营的明争暗斗。) 1.2Git的爆发 (Git 超越时代的分布式思想。振南再给你讲讲旧金山三个年轻人创办 GitHub&…

开源绘画krita中的笔刷压感开启技巧

一、问题描述 之前用过高漫的绘图板&#xff0c;在krita中没有效果&#xff0c; 原来是因为压感没有开启。方法如下。 二、解决方法 如下图点击笔刷设置按钮&#xff0c;打开 笔刷编辑器&#xff0c;之后如图顺序&#xff0c;从左栏点击笔刷控制属性“大小”&#xff0c;之…

【MySQL基本功系列】第二篇 InnoDB存储引擎的架构设计

通过上一篇文章&#xff0c;我们简要了解了MySQL的运行逻辑&#xff0c;从用户请求到最终将数据写入磁盘的整个过程。当数据写入磁盘时&#xff0c;存储引擎扮演着关键的角色&#xff0c;它负责实际的数据存储和检索。在MySQL中&#xff0c;有多个存储引擎可供选择&#xff0c;…