微信小程序 三级菜单

  • Post author:
  • Post category:小程序


微信小程序实现三级菜单真的很简单,使用的组件是picker,我们看下它的官网描述:

从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器

mode取值有如下:


普通选择器:mode = selector


多列选择器:mode = multiSelector


时间选择器:mode = time


日期选择器:mode = date


省市区选择器:mode = region


然后对着文档查看它的属性,我们先来个简单的,普通选择器

属性名 类型 默认值 说明 最低版本
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 是否禁用
bindcancel EventHandle 取消选择或点遮罩层收起 picker 时触发

多写demo玩,

wxml:

<view class='container'>
   <text class="title">普通选择器</text>
   <picker mode = "selector" value="{{countryIndex}}" range="{{region}}">
    <view class="tui-picker-detail">{{region[countryIndex]}}</view>
   </picker>
</view>

wxss:

.container{
  width: 750rpx;
  height: 1560rpx;
  background: linear-gradient(to right, #1EABDE, #196BE3);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.title {
  font-size: 48rpx;
  color: #fff;
  font-weight: 500;
}

Page中的数据:

/**
   * 页面的初始数据
   */
  data: {
    region: ["浙江省", "杭州市", "滨江区"],
    countryIndex:0
  },

要获取到选择的内容就要给组件添加事件:

  <picker mode = "selector" value="{{countryIndex}}" range="{{region}}" bindchange="fetchData">
    <view class="tui-picker-detail">{{region[countryIndex]}}</view>
   </picker>

我们添加了一个事件 bindChange=”fetchData”,关于事件 最好去官网看下文档,获取值:

 fetchData:function(event){
    this.setData({countryIndex: event.detail.value });
  },

效果:

至于event变量时小程序给我们每个定义方法都有自带的,为什么我们获取值是用event.detail.value  这个在小程序讲事件的时候就有说明:

事件对象

如无特殊说明,当组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象。


BaseEvent 基础事件对象属性列表:

属性 类型 说明

type
String 事件类型

timeStamp
Integer 事件生成时的时间戳

target
Object 触发事件的组件的一些属性值集合

currentTarget
Object 当前组件的一些属性值集合


CustomEvent 自定义事件对象属性列表(继承 BaseEvent):

属性 类型 说明

detail
Object 额外的信息


TouchEvent 触摸事件对象属性列表(继承 BaseEvent):

属性 类型 说明

touches
Array 触摸事件,当前停留在屏幕中的触摸点信息的数组

changedTouches
Array 触摸事件,当前变化的触摸点信息的数组

如果你是debug模式的看的更清楚,这是最简单的一种


多列选择器:mode = multiSelector


wxml:

 <text class='twoTitle'>多列选择器</text>
   <picker bindchange="changeMultiPicker" mode = "multiSelector" value="{{multiIndex}}" range="{{multiArray}}">
     <view class="tui-picker-detail">
     {{multiArray[0][multiIndex[0]]}}-{{multiArray[1][multiIndex[1]]}}
    </view>
   </picker>

数据源:

/**
   * 页面的初始数据
   */
  data: {
    region: ["浙江省", "杭州市", "滨江区"],
    countryIndex:0,
    multiArray: [[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12], [1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]],
    multiIndex: [10, 8],
  },

获取滚动的值:

changeMultiPicker: function (event){
    console.log("你选中的值是--->" + event.detail.value);
    this.setData({ multiIndex: event.detail.value })
  },

效果:


时间选择器:mode = time


wxml:

 <text class='twoTitle'>时间选择器</text>
   <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange">
    <view class="picker">
      当前选择: {{time}}
    </view>
  </picker>

获取选中的时间:

  bindTimeChange: function (event){
    this.setData({ time: event.detail.value })
  },

其实这些都是从官网文档copy过来的,写出来只是熟练下而已,因为我之前不是做前端出身的

效果:


日期选择器:mode = date


wxml:

 <text class='twoTitle'>日期选择器</text>
  <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange">
    <view>
      当前选择的日期: {{date}}
    </view>
  </picker>

data数据:

 /**
   * 页面的初始数据
   */
  data: {
    region: ["浙江省", "杭州市", "滨江区"],
    countryIndex:0,
    multiArray: [[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12], [1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]],
    multiIndex: [10, 8],
    time: '12:01',
    date: '2018-11-15',
  },

获取选中的日期:

bindDateChange: function (event) {
    this.setData({
      date: event.detail.value
    })
  },

效果:


省市区选择器:mode = region


wxml:

<text>地区选择</text>
   <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}">
    <view>
      当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
    </view>
  </picker>

获取选中的地区:

 bindRegionChange: function (event) {
    this.setData({
      region: event.detail.value
    })
  },

数据:

  /**
   * 页面的初始数据
   */
  data: {
    region: ["浙江省", "杭州市", "滨江区"],
    countryIndex:0,
    multiArray: [[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12], [1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]],
    multiIndex: [10, 8],
    time: '12:01',
    date: '2018-11-15',
  },

效果:

写到此.



版权声明:本文为coderinchina原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。