uniapp picker 多列选择器用法

server/2024/10/18 8:44:23/

uniapp picker 多列选择器联动筛选器交互处理方法,
uniapp 多列选择器  mode="multiSelector" 数据及筛选联动交互处理,
通过接口获取数据,根据用户选择当前列选项设置子列数据,实现三级联动效果,
本示例中处理了三级无数据时则从数据中删除,处理三级后二级无数据时则亦从数据中删除,删除的数据最终不展示在筛选器中。

html

<picker mode="multiSelector" @change="bindMultiPickerChange" @columnchange="bindMultiPickerColumnChange" :value="multiIndex" :range="communityListArray" range-key="label"><view class="picker">{{communityListArray[0][multiIndex[0]].label ? communityListArray[0][multiIndex[0]].label + ',' : ''}}{{communityListArray[1][multiIndex[1]].label ? communityListArray[1][multiIndex[1]].label + ',' : ''}}{{communityListArray[2][multiIndex[2]].label ? communityListArray[2][multiIndex[2]].label : '请选择所属社群'}}</view>
</picker>

data设置参数数据

data() {return {communityListArray : [],multiIndex : [],}
}

created 或 onLoad 中,调用请求接口获取筛选项数据方法

this.communityListDataSet();

接口获取筛选项数据,如 res.data:

[{id: 3,label: "天津",parent_id: 0,children: [{id: 51035,label: "东丽区",parent_id: 3,cityCommunity: [// 无社群数据],},],},{id: 1,label: "北京",parent_id: 0,children: [{id: 72,label: "朝阳区1",parent_id: 1,cityCommunity: [{area_id: 72, id: 13, label: "朝阳区1-社群名称",}],},{id: 73,label: "朝阳区2",parent_id: 1,cityCommunity: [// 无社群数据],}],},{id: 2,label: "上海",parent_id: 0,children: [{id: 78,label: "黄浦区",parent_id: 2,cityCommunity: [{area_id: 78, id: 16, label: "黄浦区-社群名称",}],},{id: 2813,label: "徐汇区",parent_id: 2,cityCommunity: [{area_id: 2813, id: 17, label: "徐汇区-社群名称",}],}],},{id: 4,label: "重庆",parent_id: 0,children: [{id: 119,label: "南川区",parent_id: 4,cityCommunity: [{area_id: 119, id: 5, label: "南川区-社群名称111",},{area_id: 119, id: 6, label: "南川区-社群名称222",}],}],},
]

methods 处理方法:

// 请求接口获取筛选项数据
communityListDataSet(){...this.communityListData = res.data;this.manageCommunityListThreeLevel()...
},/*
处理接口返回数据:筛选项数据删除无社群数据的城市、省份
如:天津、北京-朝阳区2,无社群数据
*/
// 处理三级无社群数据
manageCommunityListThreeLevel(){let communityLen = this.communityListData.lengthfor(var i=communityLen-1;i>=0;i--){let communityChildrenLen = this.communityListData[i].children.lengthfor(var j=communityChildrenLen-1;j>=0;j--){if(!this.communityListData[i].children[j].cityCommunity.length){this.communityListData[i].children.splice(j,1)}}}this.manageCommunityListTwoLevel()
},
// 处理二级无城市数据
manageCommunityListTwoLevel(){let communityLen = this.communityListData.lengthfor(var i=communityLen-1;i>=0;i--){if(!this.communityListData[i].children.length){this.communityListData.splice(i,1)}}this.communityListArray = [this.communityListData,this.communityListData[0].children,this.communityListData[0].children[0].cityCommunity,]
},// value 改变时触发 change 事件
bindMultiPickerChange: function (e) {// console.log(e)this.multiIndex = e.detail.value
},
// 某一列的值改变时触发 columnchange 事件
bindMultiPickerColumnChange: function (e) {if(!this.multiIndex){this.multiIndex = [0,0,0]}let column = e.detail.column;let value = e.detail.value;// console.log(column , value);let multiIndex = this.multiIndex;multiIndex[column] = value;if(column == 0){multiIndex[1] = 0;multiIndex[2] = 0;}if(column == 1){multiIndex[2] = 0;}this.multiIndex = multiIndex;let communityListArray = [];communityListArray[0] = this.communityListData;communityListArray[1] = this.communityListData[multiIndex[0]].children;if(this.communityListData[multiIndex[0]].children[multiIndex[1]].cityCommunity){communityListArray[2] = this.communityListData[multiIndex[0]].children[multiIndex[1]].cityCommunity;}else{communityListArray[2] = [];}this.communityListArray = communityListArray;
},

交互效果截图

 最终处理后的数据,天津、北京-朝阳区2,已从筛选器中删除


http://www.ppmy.cn/server/4659.html

相关文章

【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构

文章目录 前言 串行架构 并行架构 环形架构 星形架构 嵌套架构 Stateflow架构 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》 见《【研…

【MATLAB基础绘图第21棒】绘制比例弦图 (Chord Diagram)

MATLAB绘制比例弦图 Chord Diagram 1 简介1.1 弦图简介1.2 比例弦图简介 2 MATLAB绘制比例弦图2.1 数据准备2.2 基本绘制2.3 添加方向箭头2.4 添加绘图间隙2.5 添加刻度2.6 修改标签2.7 颜色设置2.8 弧块及弦属性设置2.8.1 弧块属性设置2.8.2 弦属性设置 2.9 字体设置 参考 1 简…

(七)PostgreSQL的用户管理

PostgreSQL的用户管理 1 创建用户&#xff08;角色&#xff09; CREATE USER现在是CREATE ROLE的别名。唯一的区别是&#xff0c;当命令的拼写为CREATE USER时&#xff0c;默认情况下会使用LOGIN&#xff0c;而当命令拼写为CREATE ROLE时会使用NOLOGIN。 官方文档&#xff1a…

postman几种常见的请求方式

1、get请求直接拼URL形式 对于http接口&#xff0c;有get和post两种请求方式&#xff0c;当接口说明中未明确post中入参必须是json串时&#xff0c;均可用url方式请求 参数既可以写到URL中&#xff0c;也可写到参数列表中&#xff0c;都一样&#xff0c;请求时候都是拼URL 2&am…

Linux入门学习 之 基础操作指令讲解(小白必看)

股票的规律找到了&#xff0c;不是涨就是跌 一、Linux下基本指令 1.ls 指令 2.pwd 命令 3.cd 指令 4.touch 指令 5.mkdir 指令 6.rmdir指令 && rm 指令 7.man 指令 8.cp 指令 9.mv指令 10.cat 11.more 指令 12.less 指令 13.head 指令 14.tail 指令 15…

富格林:致用查明暗箱黑幕技巧

富格林认为&#xff0c;投资现货黄金对于新手投资者来说是一个很好的选择&#xff0c;但是在进行投资之前需要了解一些基本的技巧和策略用以查明暗箱黑幕。事实上&#xff0c;现货黄金市场充满着丰富的交易机会&#xff0c;以及并存的交易风险&#xff0c;因此投资者要想在这其…

C 练习实例23

题目&#xff1a; 打印出如下图案&#xff08;菱形&#xff09;。 ********* ****************程序分析&#xff1a; 先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控…

Mac idea启动vue项目的时候报Permission denied

问题 node_modules/.bin/vue-cli-service: Permission denied 原因, 权限不足. 解决方案 chmod 777 node_modules/.bin/vue-cli-service 这里的chmod 777 是给启动服务提高权限。 注意赋权路径一定要相同 最后再重新启动命令即可