之前做过一个picker的三级联动功能,这里分享代码给大家

具体代码:

  1. // An highlighted block
  2. <template>
  3. <view>
  4. <picker mode="multiSelector" @change="bindMultiPickerChange" @columnchange="bindMultiPickerColumnChange" :value="multiIndex" :range="multiArray">
  5. <view class="picker" style="display: flex;justify-content:space-around;align-items:center;width: 100%;flex: 1">
  6. <view class="energy">
  7. {{ areaname }}
  8. <uni-icons :size="40" class="uni-icon-wrapper" color="#e0e0e0" type="arrowdown" />
  9. </view>
  10. <view style="background-color: #50a0d1;height: 50rpx;width: 1px;opacity: 0.5"></view>
  11. <view class="energy">
  12. {{ buildingname }}
  13. <uni-icons :size="40" class="uni-icon-wrapper" color="#e0e0e0" type="arrowdown" />
  14. </view>
  15. <view style="background-color: #50a0d1;height: 50rpx;width: 1px;opacity: 0.5"></view>
  16. <view class="energy">
  17. {{ floorname }}
  18. <uni-icons :size="40" class="uni-icon-wrapper" color="#e0e0e0" type="arrowdown" />
  19. </view>
  20. </view>
  21. </picker>
  22. </view>
  23. </template>
  24.  
  25. <script>
  26. import Vue from 'vue';
  27. export default {
  28. data() {
  29. return {
  30. multiArray: [['1', '2', '3', '4', '5', '6', '7'], ['1舍', '2舍', '3舍', '4舍'], ['111楼', '112楼', '113楼', '114楼']],
  31. multiIndex: [0, 0, 0],
  32. tabindex: 0,
  33. ydindex: 0,
  34. firstid: '0',
  35. secondid: '0',
  36. thirdid: '0',
  37. areaname: '1',
  38. dengswitchvalue: '',
  39. ktswitchvalue: '',
  40. buildingname: '1舍',
  41. floorname: '111楼',
  42. nowitem: '1-1舍-111楼',
  43. column1data: [
  44. //每个院部的楼栋
  45. ['11舍', '12舍', '13舍', '14舍'],
  46. // ['21舍', '22舍', '23舍', '24舍'],
  47. ['21舍'],
  48. // ['31舍', '32舍', '33舍', '34舍'],
  49. ['31舍', '32舍'],
  50. ['41舍', '42舍', '43舍', '44舍'],
  51. ['51舍', '52舍', '53舍', '54舍'],
  52. ['61舍', '62舍', '63舍', '64舍'],
  53. ['71舍', '72舍', '73舍', '74舍']
  54. ],
  55. hangdata: [
  56. //每一栋包含楼层
  57. [['111楼', '112楼', '113楼', '114楼'], ['121楼', '122楼', '123楼'], ['131楼', '132楼', '133楼', '134楼'], ['141楼', '142楼', '143楼', '144楼']],
  58. // [['211楼', '212楼', '213楼', '214楼'], ['221楼', '222楼', '223楼', '224楼'], ['231楼', '232楼', '233楼', '234楼'], ['241楼', '242楼', '243楼', '244楼']],
  59. [['211楼', '212楼', '213楼', '214楼']],
  60. // [['311楼', '312楼', '313楼', '314楼'], ['321楼', '322楼', '323楼', '324楼'], ['331楼', '332楼', '333楼', '334楼'], ['341楼', '342楼', '343楼', '344楼']],
  61. [['311楼', '312楼', '313楼', '314楼'], ['321楼', '322楼', '323楼']],
  62. [['411楼', '412楼', '413楼', '414楼'], ['421楼', '422楼', '423楼', '424楼'], ['431楼', '432楼', '433楼', '434楼'], ['441楼', '442楼', '443楼', '444楼']],
  63. [['511楼', '512楼', '513楼', '514楼'], ['521楼', '522楼', '523楼'], ['531楼', '532楼', '533楼', '534楼'], ['541楼', '542楼', '543楼', '544楼']],
  64. [['611楼', '612楼', '613楼', '614楼'], ['621楼', '622楼', '623楼', '624楼'], ['631楼', '632楼', '633楼', '634楼'], ['641楼', '642楼', '643楼', '654楼']],
  65. [['711楼', '712楼'], ['721楼', '722楼', '723楼'], ['731楼', '732楼', '733楼', '734楼'], ['741楼', '742楼', '743楼', '744楼']]
  66. ]
  67. };
  68. },
  69. methods: {
  70. bindMultiPickerChange(e) {
  71. this.multiIndex = e.detail.value;
  72. this.areaname = this.multiArray[0][e.detail.value[0]];
  73. this.buildingname = this.multiArray[1][e.detail.value[1]];
  74. this.floorname = this.multiArray[2][e.detail.value[2]];
  75.  
  76. this.nowitem = this.multiArray[0][e.detail.value[0]] + '-' + this.multiArray[1][e.detail.value[1]] + '-' + this.multiArray[2][e.detail.value[2]];
  77. console.log('选择了:' + this.nowitem);
  78. },
  79. bindMultiPickerColumnChange(e) {
  80. switch (e.detail.column) {
  81. case 0:
  82. this.firstid = e.detail.value;
  83. if (typeof this.hangdata[this.firstid][this.secondid] == 'undefined') {
  84. this.secondid = 0; //当第二列数据没有上一个second列的情况
  85. }
  86. switch (e.detail.value) {
  87. case this.firstid:
  88. Vue.set(this.multiArray, 1, this.column1data[this.firstid]);
  89. Vue.set(this.multiArray, 2, this.hangdata[this.firstid][this.secondid]); //为了对应第三列关系
  90. break;
  91. default:
  92. break;
  93. }
  94. break;
  95. case 1:
  96. this.secondid = e.detail.value;
  97. if (typeof this.hangdata[this.firstid][this.secondid][this.thirdid] == 'undefined') {
  98. this.thirdid = 0; //当第三列数据没有上一个列的情况
  99. }
  100. switch (this.firstid) {
  101. case this.firstid:
  102. switch (this.secondid) {
  103. case this.secondid:
  104. Vue.set(this.multiArray, 2, this.hangdata[this.firstid][this.secondid]);
  105. break;
  106. default:
  107. break;
  108. }
  109. break;
  110. default:
  111. break;
  112. }
  113. case 2:
  114. this.thirdid = e.detail.value;
  115. break;
  116. default:
  117. break;
  118. }
  119. }
  120. }
  121. };
  122. </script>
  123.  
  124. <style lang="less"></style>

  

uni-app 微信小程序 picker 三级联动的更多相关文章

  1. 微信小程序---自定义三级联动

    在开发的很多电商类型的项目中,免不了会遇到三级联动选择地址信息,如果单纯的使用文本框给用户选择,用户体检可能就会差很多.今天我给大家整理了关于小程序开发利用picker-view组件和animatio ...

  2. 微信小程序 实现三级联动-省市区

    github项目地址   https://github.com/z1511676208/chooseAddr 序:项目中需要用到三级联动,自己试着写了下,也查了一些资料,现在把这个记录一下,里面地区数 ...

  3. NO--14 微信小程序,左右联动二

    上一篇讲解了左=>右联动,那个还比较简单,本篇写剩下比较核心的部分,也是本次开发过程中遇到最难的部分,右=>左联动,先简单看一下演示   右左联动.gif 一.关键技术: (1) 小程序 ...

  4. 微信小程序picker组件两列关联使用方式

    在使用微信小程序picker组件时候,可以设置属性   mode = multiSelector   意为多列选择,关联选择,当第一列发生改变时侯,第二列甚至第三列发生相应的改变.但是官方文档上给的只 ...

  5. mpvue + 微信小程序 picker 实现自定义多级联动 超简洁

    微信小程序官网只提供了省市区的三级联动,实际开发中更多的是自定义的多级联动: 依照微信小程序官网提供的自定义多级联动,需要使用到picker 的多列选择器,即设置 mode = multiSelect ...

  6. NO--13微信小程序,左右联动

    写在前面: 从2016年张小龙发布微信小程序这种新的形态,到2017年小程序的不温不火,再到今年小程序的大爆发,从一度刷爆朋友圈的‘头脑王者’,再到春节聚会坐在一起的火爆小游戏“跳一跳",都 ...

  7. 微信小程序picker重写,精确到时分秒

    https://developers.weixin.qq.com/miniprogram/dev/component/picker.html 微信小程序提供的picker组件,只精确到分,项目中需要秒 ...

  8. 微信小程序picker组件关于objectArray数据类型绑定

    一.前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无法实现Object Array数据类型的绑定,其实很多人就想 ...

  9. 微信小程序——picker通过value返回你想获取的值

    关于微信小程序中的picker使用方法可以访问:picker-小程序 从它的官方文档中,可以看出它返回的value值是它range的下标: 在项目中,我们大多数时候传的值并不是需要这个下标,而是其他的 ...

随机推荐

  1. Python实现全自动购买火车票!抢票回家过年咯

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理这个是实现结果,因为一天只能取消三次,所以最后一步点击确认被我注释了1.首先实现使用selenium登 ...

  2. H3C S5120V2-SI 交换机配置

    连接终端线 可以看到开机信息 ......................................................................Done. System is ...

  3. Springboot程序启动慢及JVM上的随机数与熵池策略

    问题描述 线上环境中很容易出现一个java应用启动非常耗时的情况,在日志中可以发现是session引起的随机数问题导致的 o.a.c.util.SessionIdGeneratorBase : Cre ...

  4. springboot实现mybaitis逆向工程

    springboot实现mybaitis逆向工程 首先引入依赖,一共需要两个依赖(一个是mybaits依赖,一个是mybatis逆向工程插件) <dependency> <group ...

  5. Java 8 新特性 - Lambda表达式

    Lambda表达式 vs 匿名类既然lambda表达式即将正式取代Java代码中的匿名内部类,那么有必要对二者做一个比较分析.一个关键的不同点就是关键字 this.匿名类的 this 关键字指向匿名类 ...

  6. 微信支付(PC扫码支付和H5公众号支付)

    最近在做微信支付,微信支付比较坑,官方居然只有.NET.C#.PHP的demo居然没有java的demo.然后微信支付是不提供测试账号的需要直接用正式的公众号.首先来介绍下微信扫码支付吧,微信扫码有两 ...

  7. [leetcode]75.Sort Color三指针

    import java.util.Arrays; /** * Given an array with n objects colored red,white or blue, * sort them ...

  8. 3. Longest Substring Without Repeating Characters寻找不重复的最大子串

    首先弄清楚Substring和Subsequence,前者是子串,要求连续,后者是子序列,可以不连续 public int lengthOfLongestSubstring(String s) { / ...

  9. C语言I博客作业1

    1 .班级链接: https://edu.cnblogs.com/campus/zswxy/SE2020-3 2 .作业要求链接: https://edu.cnblogs.com/campus/zsw ...

  10. 编写高质量JAVA代码之让接口的职责保持单一

    上述标题读者朋友应该也注意到了是让接口的职责保持单一,而不是实现者单一. 设计模式六大原则之单一原则: 定义 不要存在多于一个导致类变更的原因.**通俗的说,即一个类只负责一项职责. 下面以一个电话模 ...