微信小程序 自定义picker封装成插件实现二级三级四级联动



页面调用

// array  picker 的数组
// active  picker 几级
// multiIndex picker 的回显
<PickerGroup array="{{array}}" active="{{4}}" multiIndex="{{[0,1,1,3]}}"></PickerGroup>

HTML

<view style="background:#FFF;padding:15px 0;"><picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange"range="{{defaultarray}}" value="{{multiIndex}}"><text>{{defaultarray[0][multiIndex[0]]}}</text><text wx:if="{{defaultarray.length>=2}}"> - {{defaultarray[1][multiIndex[1]]}}</text><text wx:if="{{defaultarray.length>=3}}"> - {{defaultarray[2][multiIndex[2]]}}</text><text wx:if="{{defaultarray.length>=4}}"> - {{defaultarray[3][multiIndex[3]]}}</text></picker>
</view>

js

Component({options: {styleIsolation: 'apply-shared'},properties: {active: Number, //  显示几级pickerarray: Array, // array 数据multiIndex: Array, // 回显数据},/*** 页面的初始数据  */data: {// 试例数据// array: [{//     title: '一级列表1',//     children: [{//         title: '二级列表1',//         children: [{//             title: '三级列表1',//             children: [{//                 title: '四级列表1'//             }, {//                 title: '四级列表2'//             }, {//                 title: '四级列表3'//             }, {//                 title: '四级列表4'//             }, {//                 title: '四级列表5'//             }]//         }, {//             title: '三级列表2',//             children: [{//                 title: '四级列表21'//             }, {//                 title: '四级列表22'//             }, {//                 title: '四级列表23'//             }, {//                 title: '四级列表24'//             }, {//                 title: '四级列表25'//             }]//         }, {//             title: '三级列表3',//             children: [{//                 title: '四级列表31'//             }, {//                 title: '四级列表32'//             }, {//                 title: '四级列表33'//             }, {//                 title: '四级列表34'//             }, {//                 title: '四级列表35'//             }]//         }]//     }, {//         title: '二级列表2',//         children: [{//             title: '三级列表21',//             children: [{//                 title: '四级列表211'//             }, {//                 title: '四级列表212'//             }, {//                 title: '四级列表213'//             }, {//                 title: '四级列表214'//             }, {//                 title: '四级列表215'//             }]//         }, {//             title: '三级列表22',//             children: [{//                 title: '四级列表221'//             }, {//                 title: '四级列表222'//             }, {//                 title: '四级列表223'//             }]//         }, {//             title: '三级列表23',//             children: [{//                 title: '四级列表231'//             }, {//                 title: '四级列表232'//             }]//         }]//     }]// }, {//     title: '一级列表2',//     children: [{//         title: '卡班组1',//         children: [{//             title: '卡数据线1',//             children: [{//                 title: '卡传感量1'//             }, {//                 title: '卡传感量2'//             }, {//                 title: '卡传感量3'//             }, {//                 title: '卡传感量4'//             }, {//                 title: '卡传感量5'//             }]//         }, {//             title: '卡数据线2',//             children: [{//                 title: '卡传感量21'//             }, {//                 title: '卡传感量22'//             }, {//                 title: '卡传感量23'//             }, {//                 title: '卡传感量24'//             }]//         }, {//             title: '卡数据线3',//             children: [{//                 title: '卡传感量31'//             }, {//                 title: '卡传感量32'//             }, {//                 title: '卡传感量33'//             }]//         }]//     }, {//         title: '卡班组2',//         children: [{//             title: '卡数据线21',//             children: [{//                 title: '卡传感量211'//             }, {//                 title: '卡传感量212'//             }]//         }, {//             title: '卡数据线22',//             children: [{//                 title: '卡传感量221'//             }, {//                 title: '卡传感量222'//             }, {//                 title: '卡传感量223'//             }]//         }, {//             title: '卡数据线23',//             children: [{//                 title: '卡传感量231'//             }, {//                 title: '卡传感量232'//             }]//         }]//     }]// }],defaultarray: [[],[],[],[]],},pageLifetimes: {show: function (options) {var that = this;var defaultarray = that.data.defaultarrayvar array = that.data.arrayconsole.log(array)console.log(that.data.active)//给defaultarray里的第1个数组赋值for (var i = 0, len = array.length; i < len; i++) {defaultarray[0].push(array[i].title)}// 给defaultarray里的第2个数组赋值if (this.data.active >= 2) {for (var i = 0, len = array[0].children.length; i < len; i++) {defaultarray[1].push(array[0].children[i].title)}}// 给defaultarray里的第3个数组赋值if (this.data.active >= 3) {for (var i = 0, len = array[0].children[0].children.length; i < len; i++) {defaultarray[2].push(array[0].children[0].children[i].title)}}if (this.data.active >= 4) {// 给defaultarray里的第4个数组赋值for (var i = 0, len = array[0].children[0].children[0].children.length; i < len; i++) {defaultarray[3].push(array[0].children[0].children[0].children[i].title)}}defaultarray.length = this.data.activeif(this.data.multiIndex.length<=0){that.setData({multiIndex: ("").padEnd(this.data.active,0).split("").map(x=>parseInt(x)),})}// 渲染that.setData({defaultarray: defaultarray,})//!!!!!!!!要展示到界面的数据一定要用setdata!!!!!!!!!// that.data.defaultarray = defaultarrayconsole.log(defaultarray)console.log()},},methods: {bindMultiPickerChange: function (e) {console.log('选中的值为', e.detail.value)this.setData({multiIndex: e.detail.value})},bindMultiPickerColumnChange: function (e) {console.log('修改的列为', e.detail.column, ',(列下标)值为', e.detail.value);var that = this;var defaultarray = that.data.defaultarray,array = that.data.array,multiIndex = that.data.multiIndex// 更改multiIndexmultiIndex[e.detail.column] = e.detail.value// 联动变化defaultarray数组var searchColumn = () => {for (var i = 0; i < array.length; i++) {var arr1 = []; //defaultarray[1]var arr2 = []; //defaultarray[2]var arr3 = []; //defaultarray[3]if (i == multiIndex[0]) { //找到修改的列号ifor (var j = 0; j < array[i].children.length; j++) {arr1.push(array[i].children[j].title);if (this.data.active >= 3) {if (j == multiIndex[1]) {for (var k = 0; k < array[i].children[j].children.length; k++) {arr2.push(array[i].children[j].children[k].title);if (this.data.active >= 4) {if (k == multiIndex[2]) {for (var g = 0; g < array[i].children[j].children[k].children.length; g++) {arr3.push(array[i].children[j].children[k].children[g].title);}defaultarray[3] = arr3;}}}defaultarray[2] = arr2;}}}defaultarray[1] = arr1;}};}switch (e.detail.column) {case 0:multiIndex[1] = 0;multiIndex[2] = 0;multiIndex[3] = 0;searchColumn();break;case 1:multiIndex[2] = 0;multiIndex[3] = 0;searchColumn();break;case 2:multiIndex[3] = 0;searchColumn();break;}this.setData({defaultarray: defaultarray,multiIndex: multiIndex});},},})

下载地址: link

微信小程序 自定义picker封装成插件实现二级三级四级联动相关推荐

  1. 【小程序】一文学会微信小程序自定义组件封装

    一.什么是自定义组件 在实际开发过程中,经常会有代码复用的情况,即在不同的页面有类似结构的代码块,类似的代码反复出现,这样会增加代码维护成本,也会造成代码的高耦合,为了解决这一情况,微信小程序支持了更 ...

  2. 微信小程序自定义picker多列选择器

    需求说明 使用 mpvue 实现自定义的 picker 多列选择器. 1.数据结构说明 根据 picker 的数据特征,需要构造一个如下所示的数据结构.data数组中的三个元素,分别用于渲染 pick ...

  3. 关于微信小程序自定义Picker样式的picker-view

    这里给大家介绍一下在开发微信小程序中使用到需要自定义样式的picker(picker-view)的基本用法 这里就是一个很简单的自定义样式的Picker. 下面贴出代码 wxml: <picke ...

  4. 微信小程序自定义picker弹框组件

    要有遥不可及的梦想,也要有脚踏实地的本事.----------- Grapefruit.Banuit Gang(香柚帮) 柚子写项目遇到了一个问题,就是微信小程序官方文档上面的弹框组件picker,它 ...

  5. 微信小程序-自定义picker选择器

    github地址 为什么要自定义picker 原生小程序picker不支持自定义样式,无联动. 该自定组件 支持自定义数据 支持自定义样式 支持传入和返回对象或者基本类型 支持联动(改变父列,子列根据 ...

  6. 小程序picker标题_微信小程序-自定义picker选择器

    avatar 为什么要自定义picker 原生小程序picker不支持自定义样式,无联动. 该自定组件 支持自定义数据 支持自定义样式 支持传入和返回对象或者基本类型 支持联动(改变父列,子列根据关联 ...

  7. 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议wxzx-xxx命名 例如,我们封装的组件名为 **wxzx-loadmore wxzx-loadmore.wxml 正在 ...

  8. 小程序自定义导航封装成组件后如何监听滚动距离

    我获取滚动的距离,主要是想做自定义导航吸顶效果之后对样式进行改变的效果 思路:根据滚动距离的临界值,改变isActive的值 第一步:曲线救国的方式,因为onPageScroll方法在组件中不生效(目 ...

  9. 微信小程序自定义标签组件component封装、组件生命周期,组件通信

    微信小程序自定义标签组件component封装.组件生命周期,组件通信 本文来说下小程序的自定义标签组件封装. 相比于vue,react的非路由组件,微信小程序的component组件要麻烦些,而且生 ...

  10. 微信小程序下拉框插件_微信小程序自定义select下拉选项框组件的实现代码_清玖_前端开发者...

    知识点:组件,animation,获取当前点击元素的索引与内容 微信小程序中没有select下拉选项框,所以只有自定义.自定义的话,可以选择模板的方式,也可以选择组件的方式来创建. 这次我选择了组件, ...

最新文章

  1. 盘丝洞服务器维护,斗战神哪些区合区了_斗战神合区后名字重复怎么办_快吧游戏...
  2. 从谷歌离职回到西湖大学,只为让AI听懂你的悲伤!
  3. 学习笔记——Numpy基本操作(二)
  4. 在云服务器上执行C程序和python程序(centos系统)
  5. Qt Linguist翻译过程概述
  6. 将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
  7. 二叉树的层序遍历—leetcode102
  8. linux 6.5桌面环境kde,CentOS 5/6 安装 GNOME 或 KDE 桌面
  9. java caller_js中的caller和callee属性
  10. GNU make manual 翻译(三十八)
  11. JavaScript创建页面节点
  12. poj_3468 伸展树
  13. 阿里云最新虚拟化研发岗招聘
  14. 软件工程——背单词软件对比
  15. css flex 布局 space-around 和 space-evenly 之间的区别css flex布局)
  16. vue + element-ui本地下载图片
  17. 表的创建(create),修改(alter)和删除(drop)
  18. 电商运营中的五个数据陷阱
  19. 高德地图插件使用汇总(干货-从注册到熟练使用)
  20. 如何从型号判断NVR支持的接入路数和硬盘数?

热门文章

  1. 票据html模板,票据库.html · 胡凯锋/API_ML_AI_Note - Gitee.com
  2. iozone联机测试
  3. 自适应滤波器设计及matlab实现,[转载]自适应滤波器设计与MATLAB
  4. python excel公式计算_excel公式函数
  5. linux查询hba卡驱动版本,Linux下查看HBA卡的驱动版本和WWPN
  6. 单网口RFC2544测试——信而泰网络测试仪实操
  7. 宝德银河麒麟系统打印机安装及共享方法(一)
  8. 黄金分割法求极值 matlab,利用matlab实现黄金分割法求极值问题-北京理工大学-机械优化设计.doc...
  9. Arcgis一些操作
  10. Python基于机器视觉的图像风格迁移