html5地区级联选择,【JS】vue+vant移动端地区级联选择组件
首页
专栏
javascript
文章详情
0
vue+vant移动端地区级联选择组件
quanta发布于 今天 08:25
写在开头:项目的框架是vue+vant,业务需求一个级联的地区选择,写完才发现vant本身也有这组件….后来看vant本身用的逻辑跟我不太一样,觉得还有点思考价值那就发上来当做实现记录吧~
总体思路(select与tabs独立):
列表选择(select)
1)获取当前tabs的长度 -> 设置当前active的name
2)通过levelCollect(最终选择的数据集)设置每个层级,例:[‘第一层数据’,’第二层数据’,’第三层数据’,…]
3)删除后级数据,更新tabs长度
4)如果有下级,新增active并选中,如果没有设置完成
tab选择(tabsClick)
1)拷贝一次原始数据,设置列表筛选数据:0级使用原始数据,其它选用存储数据设置高亮
2)滚动到选中
目前功能支持:
·自定义数据
·N级数据联动
·上级数据选择后修改
·选择项高亮
todo:
数据回填
效果图:
addressCard.vue
请选择所在地区
.
{{item.name}}
import { Tab,Tabs } from 'vant';
import areaJson from './areaJson/pcas-code.json'
export default {
components: {
[Tab.name]: Tab,
[Tabs.name]:Tabs
},
data(){
return{
active:1,
levelCollect:[],
originArea:areaJson,
areaJson,
tabsData:[{
name:'请选择'
}]
}
},
created(){
},
methods:{
select(item){
// 获取当前tabs的长度
let len = this.tabsData.length
// 设置当前active的name
this.tabsData[this.active].name = item.name
// 设置每个层级
this.levelCollect[this.active] = item
if(this.active
// 删除后部的城镇
this.tabsData.splice(this.active+1)
// 更新tabs长度
len = this.tabsData.length
}
// 如果有下级,新增active并选中
if(item.children){
this.tabsData.push({name:'请选择'})
// this.active = len
this.$refs.tabs.scrollTo(len)
this.areaJson = item.children
}else{
this.tabsClick(this.active,item.name)
}
},
tabsClick(name,title){
// 设置列表筛选数据:0级使用原始数据,其它选用存储数据设置高亮
if(name===0){
this.areaJson = this.originArea.slice().map(item=>{
return {
...item,
select:item.name===title
}
})
}else{
this.areaJson = this.levelCollect[name-1].children.map(item=>{
return {
...item,
select:item.name===title
}
})
}
// 滚动到选中
this.$nextTick(()=>{
let doc = document.querySelector('.select')
doc&&doc.scrollIntoView();
})
}
}
};
.addressWrapper {
padding:20px 10px;
h4{
text-align:center;
}
.tabs{
margin-top:20px;
/deep/.van-tabs__content{
display: none;
}
.content{
margin-top:20px;
height: 200px;
overflow: scroll;
.item{
line-height:40px;
font-size:14px;
&.select{
color:red;
}
}
}
}
}
附上本文中地区pcas-code.json数据:
https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas-code.json
javascriptvue.jscascadervant
阅读 88更新于 今天 08:32
赞收藏
分享
本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
quanta
no bug
11声望
2粉丝
关注作者
0 条评论
得票时间
提交评论
quanta
no bug
11声望
2粉丝
关注作者
宣传栏
目录
▲
写在开头:项目的框架是vue+vant,业务需求一个级联的地区选择,写完才发现vant本身也有这组件….后来看vant本身用的逻辑跟我不太一样,觉得还有点思考价值那就发上来当做实现记录吧~
总体思路(select与tabs独立):
列表选择(select)
1)获取当前tabs的长度 -> 设置当前active的name
2)通过levelCollect(最终选择的数据集)设置每个层级,例:[‘第一层数据’,’第二层数据’,’第三层数据’,…]
3)删除后级数据,更新tabs长度
4)如果有下级,新增active并选中,如果没有设置完成
tab选择(tabsClick)
1)拷贝一次原始数据,设置列表筛选数据:0级使用原始数据,其它选用存储数据设置高亮
2)滚动到选中
目前功能支持:
·自定义数据
·N级数据联动
·上级数据选择后修改
·选择项高亮
todo:
数据回填
效果图:
addressCard.vue
请选择所在地区
.
{{item.name}}
import { Tab,Tabs } from 'vant';
import areaJson from './areaJson/pcas-code.json'
export default {
components: {
[Tab.name]: Tab,
[Tabs.name]:Tabs
},
data(){
return{
active:1,
levelCollect:[],
originArea:areaJson,
areaJson,
tabsData:[{
name:'请选择'
}]
}
},
created(){
},
methods:{
select(item){
// 获取当前tabs的长度
let len = this.tabsData.length
// 设置当前active的name
this.tabsData[this.active].name = item.name
// 设置每个层级
this.levelCollect[this.active] = item
if(this.active
// 删除后部的城镇
this.tabsData.splice(this.active+1)
// 更新tabs长度
len = this.tabsData.length
}
// 如果有下级,新增active并选中
if(item.children){
this.tabsData.push({name:'请选择'})
// this.active = len
this.$refs.tabs.scrollTo(len)
this.areaJson = item.children
}else{
this.tabsClick(this.active,item.name)
}
},
tabsClick(name,title){
// 设置列表筛选数据:0级使用原始数据,其它选用存储数据设置高亮
if(name===0){
this.areaJson = this.originArea.slice().map(item=>{
return {
...item,
select:item.name===title
}
})
}else{
this.areaJson = this.levelCollect[name-1].children.map(item=>{
return {
...item,
select:item.name===title
}
})
}
// 滚动到选中
this.$nextTick(()=>{
let doc = document.querySelector('.select')
doc&&doc.scrollIntoView();
})
}
}
};
.addressWrapper {
padding:20px 10px;
h4{
text-align:center;
}
.tabs{
margin-top:20px;
/deep/.van-tabs__content{
display: none;
}
.content{
margin-top:20px;
height: 200px;
overflow: scroll;
.item{
line-height:40px;
font-size:14px;
&.select{
color:red;
}
}
}
}
}
附上本文中地区pcas-code.json数据:
https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas-code.json
html5地区级联选择,【JS】vue+vant移动端地区级联选择组件相关推荐
- vue+vant 移动端国际区号组件封装
1.组件 <template><div><van-nav-bar title="Select Country/Region" left-arrow @ ...
- Capacitor+Vue+Vant移动端打包总结
Capacitor+Vue+Vant移动端打包总结 本笔记为打包Vue移动端Android Apk 打包步骤 Capacitor与Vue项目结合基本配置自行百度/谷歌,这里是已集成配置好的项目. 1. ...
- vue+vant 移动端H5 商城项目_03
文章目录 一.·首页搜索功能 1. 搜索页面 2. 历史记录和热门搜索组件 3. 搜索框提示列表组件 4. 综合-价格-分类 5. 搜索出的产品展示 6. 异常修复 7. 路由拦截/路由守卫 二.详情 ...
- vue+vant 移动端H5 商城项目_04
文章目录 一.专题页 1. 效果图 2. 专题api 2.Topic.vue 组件 3. 专题源码 二.分类页 2.1. 效果图 2.2. 分类api 2.3. Category.vue 组件 三.购 ...
- vue+vant 移动端H5 商城项目_02
文章目录 一.路由规划 1. 新建路由配置 2. 下载vue-router 3. 路由注册 4. 路由基础配置 5. 路由挂载 6. AppTabBar 7. 二.移动端首页 2.1.首页效果 2.2 ...
- vue+vant 移动端H5 商城项目_01
文章目录 一.·Rem 布局适配 1. 安装 amfe-flexible 2. px转化rem 3. 全局配置 4. 重置样式表 5. 引入重置样式表 二.组件安装和配置与封装 2.1. 安装less ...
- 最新vue+vant移动端电商项目
今天为大家带来一个Vue+VantUi完成的一个一个移动端电商项目,供大家学习和参考. 源码已上传到码云上面https://gitee.com/jiuyueqi/vyx, 如果有需要源码或者接口文档的 ...
- VUE Vant移动端开发
Vant 什么是Vant Vant是一个轻量,可靠的移动端组件库,2017开源 目前 Vant 官方提供了 Vue 2 版本.Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付 ...
- 计算机毕业设计node.js+vue+Web移动端外卖平台
项目介绍 顾客可以浏览商品,加入购物车,下单支付,功能参考美团外卖饿了么的基础功能 商家这边能进行商品的添加,修改,删除,查找,商家入驻.资料修改,商家注销,根据营业情况调整商品详情,营业时间,配送时 ...
最新文章
- linux下安装hadoop
- 网络数据采集与python爬虫_高校邦网络数据采集与Python爬虫答案
- ubuntu终端显示乱码的解决
- 《MySQL管理之道:性能调优、高可用与监控》china-pub首发!
- c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版_搜狐汽车...
- android xml导进数据库,Android通过xml文件配置数据库
- Dell Chromebook11 刷Ubuntu
- leetcode 栈 二叉树的前向遍历
- 新手如何从零开始学习unity
- 基于PyQt5与opencv制作的证件照尺寸变换应用程序
- 计算机相关的外文参考文献,计算机英文参考文献
- python构造方法的方法名_构造方法是类的一个特殊方法,Python中它的名称为()。
- Java程序员拼多多3轮面试,这些面试题你能掌握多少?
- Warning [gazebo.cc:215] Waited 1seconds for namespaces.
- android 视频添加音乐,手机怎么给视频加音乐,安卓手机软件怎么给视频添加音乐比较方便...
- 超全万字汇总!科研论文绘图实操干货!11类Matplotlib图表,含代码
- 安装opencv 3.4.1记录
- 组件通信之sync-父子数据同步
- 软件测试的前景还是很广阔的,你怎么看?
- 光学动作捕捉系统使用教程:刚体贴点说明
热门文章
- 微信小程序:打开设置(权限)页面
- error#10052:could not checkout FLEXlm license
- [毕业设计]LaTeX论文模板排版
- python快速实现2048小游戏
- 正则表达式匹配连续多个空格或tab空格
- 西安交通大学计算机基础期末考试,《大学计算机基础试题与答案》-西安交通大学.doc...
- 火狐FEBE扩展正确使用方法
- 和平精英计算机音乐,和平精英音乐盒里的音乐叫什么名字 和平精英音乐盒攻略...
- slurm作业管理系统怎么用?
- dubbo教程总结(springboot+dubbo)