鱼C论坛

 找回密码
 立即注册
查看: 1608|回复: 0

[庖丁解牛] 047 ∞ 表单组件:picker

[复制链接]
发表于 2018-6-25 09:42:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2018-6-25 09:44 编辑


                               
登录/注册后可看大图


上一讲我们搞定了label,本次来学习picker

picker,从底部弹起的滚动选择器。

现支持五种选择器,通过mode来区分,分别是:
普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。


普通选择器:mode = selector ,属性:
属性名        类型        默认值        说明
range        Array / Object Array        []        mode为 selector 或 multiSelector 时,range 有效
range-key        String                当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value        Number        0        value 的值表示选择了 range 中的第几个(下标从 0 开始)
bindchange        EventHandle                value 改变时触发 change 事件,event.detail = {value: value}
disabled        Boolean        false        是否禁用


多列选择器:mode = multiSelector(最低版本:1.4.0),属性:
属性名        类型        默认值        说明
range        二维Array / 二维Object Array        []        mode为 selector 或 multiSelector 时,range 有效。二维数组,长度表示多少列,数组的每项表示每列的数据,如[["a","b"], ["c","d"]]
range-key        String                当 range 是一个 二维Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value        Array        []        value 每一项的值表示选择了 range 对应项中的第几个(下标从 0 开始)
bindchange        EventHandle                value 改变时触发 change 事件,event.detail = {value: value}
bindcolumnchange        EventHandle                某一列的值改变时触发 columnchange 事件,event.detail = {column: column, value: value},column 的值表示改变了第几列(下标从0开始),value 的值表示变更值的下标
disabled        Boolean        false        是否禁用


时间选择器:mode = time ,属性:
属性名        类型        默认值        说明
value        String                表示选中的时间,格式为"hh:mm"
start        String                表示有效时间范围的开始,字符串格式为"hh:mm"
end        String                表示有效时间范围的结束,字符串格式为"hh:mm"
bindchange        EventHandle                value 改变时触发 change 事件,event.detail = {value: value}
disabled        Boolean        false        是否禁用


日期选择器:mode = date ,属性:
属性名        类型        默认值        说明
value        String        0        表示选中的日期,格式为"YYYY-MM-DD"
start        String                表示有效日期范围的开始,字符串格式为"YYYY-MM-DD"
end        String                表示有效日期范围的结束,字符串格式为"YYYY-MM-DD"
fields        String        day        有效值 year,month,day,表示选择器的粒度
bindchange        EventHandle                value 改变时触发 change 事件,event.detail = {value: value}
disabled        Boolean        false        是否禁用


fields 有效值
值        说明
year        选择器粒度为年
month        选择器粒度为月份
day        选择器粒度为天


省市区选择器:mode = region(最低版本:1.4.0) ,属性:
属性名        类型        默认值        说明
value        Array        []        表示选中的省市区,默认选中每一列的第一个值
custom-item        String                可为每一列的顶部添加一个自定义的项 (基础库 1.5.0 开始支持)
bindchange        EventHandle                value 改变时触发 change 事件,event.detail = {value: value}
disabled        Boolean        false        是否禁用


index.wxml:
  1. <view class="section">
  2.   <view class="section__title">普通选择器</view>
  3.   <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
  4.     <view class="picker">
  5.       当前选择:{{array[index]}}
  6.     </view>
  7.   </picker>
  8. </view>
  9. <view class="section">
  10.   <view class="section__title">多列选择器</view>
  11.   <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
  12.     <view class="picker">
  13.       当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
  14.     </view>
  15.   </picker>
  16. </view>
  17. <view class="section">
  18.   <view class="section__title">时间选择器</view>
  19.   <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange">
  20.     <view class="picker">
  21.       当前选择: {{time}}
  22.     </view>
  23.   </picker>
  24. </view>

  25. <view class="section">
  26.   <view class="section__title">日期选择器</view>
  27.   <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange">
  28.     <view class="picker">
  29.       当前选择: {{date}}
  30.     </view>
  31.   </picker>
  32. </view>
  33. <view class="section">
  34.   <view class="section__title">省市区选择器</view>
  35.   <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}">
  36.     <view class="picker">
  37.       当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
  38.     </view>
  39.   </picker>
  40. </view>
复制代码


index.js:
  1. Page({
  2.   data: {
  3.     array: ['中国', '美国', '巴西', '日本'],
  4.     objectArray: [
  5.       {
  6.         id: 0,
  7.         name: '美国'
  8.       },
  9.       {
  10.         id: 1,
  11.         name: '中国'
  12.       },
  13.       {
  14.         id: 2,
  15.         name: '巴西'
  16.       },
  17.       {
  18.         id: 3,
  19.         name: '日本'
  20.       }
  21.     ],
  22.     index: 0,
  23.     multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']],
  24.     objectMultiArray: [
  25.       [
  26.         {
  27.           id: 0,
  28.           name: '无脊柱动物'
  29.         },
  30.         {
  31.           id: 1,
  32.           name: '脊柱动物'
  33.         }
  34.       ], [
  35.         {
  36.           id: 0,
  37.           name: '扁性动物'
  38.         },
  39.         {
  40.           id: 1,
  41.           name: '线形动物'
  42.         },
  43.         {
  44.           id: 2,
  45.           name: '环节动物'
  46.         },
  47.         {
  48.           id: 3,
  49.           name: '软体动物'
  50.         },
  51.         {
  52.           id: 3,
  53.           name: '节肢动物'
  54.         }
  55.       ], [
  56.         {
  57.           id: 0,
  58.           name: '猪肉绦虫'
  59.         },
  60.         {
  61.           id: 1,
  62.           name: '吸血虫'
  63.         }
  64.       ]
  65.     ],
  66.     multiIndex: [0, 0, 0],
  67.     date: '2016-09-01',
  68.     time: '12:01',
  69.     region: ['广东省', '汕头市', '澄海区'],
  70.     customItem: '全部'
  71.   },
  72.   bindPickerChange: function (e) {
  73.     console.log('picker发送选择改变,携带值为', e.detail.value)
  74.     this.setData({
  75.       index: e.detail.value
  76.     })
  77.   },
  78.   bindMultiPickerChange: function (e) {
  79.     console.log('picker发送选择改变,携带值为', e.detail.value)
  80.     this.setData({
  81.       multiIndex: e.detail.value
  82.     })
  83.   },
  84.   bindMultiPickerColumnChange: function (e) {
  85.     console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
  86.     var data = {
  87.       multiArray: this.data.multiArray,
  88.       multiIndex: this.data.multiIndex
  89.     };
  90.     data.multiIndex[e.detail.column] = e.detail.value;
  91.     switch (e.detail.column) {
  92.       case 0:
  93.         switch (data.multiIndex[0]) {
  94.           case 0:
  95.             data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'];
  96.             data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
  97.             break;
  98.           case 1:
  99.             data.multiArray[1] = ['鱼', '两栖动物', '爬行动物'];
  100.             data.multiArray[2] = ['鲫鱼', '带鱼'];
  101.             break;
  102.         }
  103.         data.multiIndex[1] = 0;
  104.         data.multiIndex[2] = 0;
  105.         break;
  106.       case 1:
  107.         switch (data.multiIndex[0]) {
  108.           case 0:
  109.             switch (data.multiIndex[1]) {
  110.               case 0:
  111.                 data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
  112.                 break;
  113.               case 1:
  114.                 data.multiArray[2] = ['蛔虫'];
  115.                 break;
  116.               case 2:
  117.                 data.multiArray[2] = ['蚂蚁', '蚂蟥'];
  118.                 break;
  119.               case 3:
  120.                 data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];
  121.                 break;
  122.               case 4:
  123.                 data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];
  124.                 break;
  125.             }
  126.             break;
  127.           case 1:
  128.             switch (data.multiIndex[1]) {
  129.               case 0:
  130.                 data.multiArray[2] = ['鲫鱼', '带鱼'];
  131.                 break;
  132.               case 1:
  133.                 data.multiArray[2] = ['青蛙', '娃娃鱼'];
  134.                 break;
  135.               case 2:
  136.                 data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];
  137.                 break;
  138.             }
  139.             break;
  140.         }
  141.         data.multiIndex[2] = 0;
  142.         console.log(data.multiIndex);
  143.         break;
  144.     }
  145.     this.setData(data);
  146.   },
  147.   bindDateChange: function (e) {
  148.     console.log('picker发送选择改变,携带值为', e.detail.value)
  149.     this.setData({
  150.       date: e.detail.value
  151.     })
  152.   },
  153.   bindTimeChange: function (e) {
  154.     console.log('picker发送选择改变,携带值为', e.detail.value)
  155.     this.setData({
  156.       time: e.detail.value
  157.     })
  158.   },
  159.   bindRegionChange: function (e) {
  160.     console.log('picker发送选择改变,携带值为', e.detail.value)
  161.     this.setData({
  162.       region: e.detail.value
  163.     })
  164.   }
  165. })
复制代码

Jun-25-2018 09-41-30.gif
Snip20180625_218.png





课后作业


1、picker的mode属性的默认值是?



答案:
游客,如果您要查看本帖隐藏内容请回复





如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢小程序,请订阅 专辑&#9758;传送门)(不喜欢更要订阅



                               
登录/注册后可看大图

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 05:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表