微信小程序开发笔记(1.1)滚动选择器picker的使用
微信小程序开发笔记(1.1)滚动选择器picker的使用
- 前言
- 滚动选择器picker
- 普通选择器
- 多列选择器
- 时间选择器
- 日期选择器
- 省市区选择器
前言
最近被拉来做小程序,因为时间比较赶,其他方面只能放一放了。也没办法很系统地去学习,只能是以功能为导向,需要实现什么功能就去一步步学习做法,同时记录一下学习过程。
今天实现的是一个很简单的功能:对各省市历年分数线的查询,如图所示
这个功能其实很简单:用户选择相应的条件后,点击 “查询” ,然后将查询的结果展示出来即可。
主要涉及了三个部分:
- 滚动选择器picker
- 单项选择框radio
- 对云端数据的读取与显示
分别用三篇博客来讲述。今天讲的是滚动选择器picker。
滚动选择器picker
先来看官方文档的描述。
网址:微信官方文档-picker
以上是picker的通用属性,没什么好说的,主要讲一下mode属性。
选择器一共有五种:
普通选择器
普通的选择器也就是我们要用的单列选择器,只有一列选项可以选择
如何配置这个普通选择器呢?除了picker的通用属性以外,不同的选择器也有不同的属性。
range:你所提供的选项集合。它可以是一个数组,也可以是一个对象数组。
value:当前选中的选项的下标
bindchange:value值改变后触发的事件,就是用户滑到其他选项并点击 “确定” 后所触发的事件
range-key:如果你提供的选项是只是一个数组,普通选择器自然显示的是数组中的内容。但是如果你提供的是对象数组(objectArray),而你想展示的只是对象的某个属性(objectArray.name),因此还需要设置range-key值来选择你想展示的属性。
注:书写时 range = "{{ ‘属性字段’ }} "。要将属性字段加上单引号才有效。
在 js 界面准备好数据后,在wxml界面配置选择器,并进行数据绑定。
<view class="section"><!--range:array--><view class="section__title">普通选择器</view><picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}"><view class="picker">当前选择:{{array[index]}}</view></picker>
</view>
<!--range:objectArray-->
<view class="section"><view class="section__title">普通选择器</view><picker bindchange="bindPickerChange" value="{{index}}" range="{{objectArray}}" range-key="{{'name'}}"><view class="picker">当前选择:{{objectArray[index].name}}</view></picker>
</view>
js界面准备的数据(放在data中),以及bindchange所绑定的事件
Page({data: {array: ['美国', '中国', '巴西', '日本'],objectArray: [{id: 0,name: '美国'},{id: 1,name: '中国'},{id: 2,name: '巴西'},{id: 3,name: '日本'}],index: 0},bindPickerChange: function (e) {console.log('picker发送选择改变,携带值为', e.detail.value)this.setData({index: e.detail.value})}
})
注:这是微信开放文档的示例代码,在刚刚给的网址中可以找到,下面的示范就不复制粘贴了。
多列选择器
多列选择器即有多个列的选项可以选择
依旧来看一下多列选择器可以配置的属性
前面四个属性和普通选择器没有区别。
bindcolumnchange:所选择的列的值发生改变时触发的事件
注:与bindchange不同的是,bindchange是点击 “确定” 后才会触发。而bindcolumnchange是只要列的值一发生变化就触发。
例如,将第一列滑到 “脊柱动物” 后就会立刻触发bindcolumnchange所绑定的事件,再将它滑回 “无脊柱动物” 又会触发一次。但是只要不点击 “确定” ,bindchange是不会触发的。
多项选择器虽然只多了一个属性,但是比单项选择器复杂得多,主要是因为多项选择器中,前后列可能存在着关联,需要随时变化。
我们先来看前后列没关系的例子。
对于第一列来说,每一级都会对应 [‘上学期’,‘下学期’] 和 [‘1班’,‘2班’,‘3班’]。也就是说,每一列值发生变化不影响其他列的值。因此数据是不需要变化的,初始设置好就行了。
classArray: [['2016级','2017级','2018级','2019级'],['上学期','下学期'],['1班','2班','3班']],classIndex: [0,0,0]
下面来看一下前后列有关系的例子,也就是官方文档中给出的例子
在这个例子中,第一列的选项发生变化后,第二、第三列的选项也要发生变化,第二列的选项发生变化后,第三列的选项也要发生变化。这就是一个三级级联的选择器。
要实现这个功能,关键就是在bindcolumnchange事件被调用的时候,对相应数组的值进行修改。
首先,第一列提供的选项是 [‘无脊柱动物’, ‘脊柱动物’] , 因为第一列默认先选择的是 ‘无脊柱动物’ ,因此第二列要提供的选项是 [‘扁形动物’, ‘线形动物’, ‘环节动物’, ‘软体动物’, ‘节肢动物’] 。因为第二列默认先选择的是 ’ 扁形动物’ ,因此第三列要提供的选项是 [‘猪肉绦虫’, ‘吸血虫’] 。这就组成了初始的数据数组。
multiArray: [['无脊柱动物', '脊柱动物'], ['扁形动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']]
现在,假设用户将第二列的选项滑动到 ‘环节动物’,那么第三列的数据就应该改为 [‘蚂蚁’, ‘蚂蟥’]。修改后的数组如下。
multiArray: [['无脊柱动物', '脊柱动物'], ['扁形动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['蚂蚁', '蚂蟥']]
现在,假设用户将第一列的选项滑到 ‘脊柱动物’,那么第二列的数据就应该改为 [‘鱼’, ‘两栖动物’, ‘爬行动物’]。因为此时第二列默认会选择的是 ‘鱼’ ,因此第三列要提供的选项是 [‘鲫鱼’, ‘带鱼’] 。修改后的数组如下。
multiArray: [['无脊柱动物', '脊柱动物'], ['鱼', '两栖动物', '爬行动物'], ['鲫鱼', '带鱼']]
现在,假设用户将第二列的选项滑动到 ‘两栖动物’,那么第三列的数据就应该改为 [‘青蛙’, ‘娃娃鱼’]。修改后的数组如下。
multiArray: [['无脊柱动物', '脊柱动物'], ['鱼', '两栖动物', '爬行动物'], ['青蛙', '娃娃鱼']]
也就是说,第二列的选项变化的时候,要修改第三列的数组数据。第一列选项变化的时候,要修改第二列的数组数据,又因为第二列的选项也被改变了,同时也要修改第三列的数组数据。那么怎么在bindcolumnchange事件中实现呢?
在这个事件中,可以得到被修改的列(e.detail.column),和修改后的值(e.detail.value)
console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
首先判断被修改的列,假如是第一列的话,multiArray其实只有两种情况:
- 第一列选择无脊柱动物,根据无脊柱动物配置第二列;第二列默认选择扁形动物,根据扁形动物配置第三列
- 第一列选择脊柱动物,根据脊柱动物配置第二列;第二列默认选择鱼,根据鱼配置第三列
//第一个选项
multiArray: [['无脊柱动物', '脊柱动物'], ['扁形动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']]
//第二个选项
multiArray: [['无脊柱动物', '脊柱动物'], ['鱼', '两栖动物', '爬行动物'], ['鲫鱼', '带鱼']]
代码:
//先判断修改的列switch (e.detail.column){//第一列case 0://再判断修改后的值switch (e.detail.value){case 0:data.multiArray = [['无脊柱动物', '脊柱动物'], ['扁形动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']];break;case 1:data.multiArray = [['无脊柱动物', '脊柱动物'], ['鱼', '两栖动物', '爬行动物'], ['鲫鱼', '带鱼']];break;}break;}
假如是第二列,因为不知道这时候选中的第一列是哪一个选项(每一个选项对应的第二列的数据不同),我们只知道第二列的值被修改了。例如从第二个选项滑到了第一个选项,但是无法确定第一个选项到底是 ‘扁形动物’ 还是 ‘鱼’ 。
因此首先要判断第一列的选项值,再判断第二列修改后的值,才能修改第三列的数据。
//第二列case 1://先判断第一列是哪个选项switch (data.multiIndex[0]){//第一个选项case 0://判断修改后的值switch (e.detail.value){//修改第三列的数据case 0:data.multiArray[2] = ['猪肉绦虫', '吸血虫'];break;case 1:data.multiArray[2] = ['蛔虫'];break;case 2:data.multiArray[2] = ['蚂蚁', '蚂蟥'];break;case 3:data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];break;case 4:data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];break;}break;//第二个选项case 1://判断修改后的值switch (e.detail.value){//修改第三列的数据case 0:data.multiArray[2] = ['鲫鱼', '带鱼'];break;case 1:data.multiArray[2] = ['青蛙', '娃娃鱼'];break;case 2:data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];break;}break;}break;
时间选择器
属性:
value: 当前所选中的时间,格式是"hh:mm"。
start: 有效时间范围的开始,格式是"hh:mm"。
注:这个“有效时间范围”,指的是用户可以选择的时间范围。但是在提供的选项上并不只在这个范围内。例如,设置有效时间范围的开始为"06:00",选项上仍然会有"05:00",“04:00”…"00:00"可以选,只是选中之后又会滚回“06:00”而已。
end: 有效时间范围的结束,格式是“hh:mm”。同上。
bindchange: value值改变后触发的事件,就是用户滑到其他选项并点击 “确定” 后所触发的事件。
日期选择器
属性:
其他部分和时间选择器差别不大,主要讲一下fields属性。
- fields:表示选择器的粒度。这个 “粒度” 指的就是所提供选项的精细程度。也就是说,假如设置的是 “year” ,那么就只有年份可以选,假如设置的是 “month”,就有年份和月份可以选,假如设置的是 “day”,就有年月日可以选。
省市区选择器
微信小程序内置的省市区选择器,不需要自己准备数据,直接调用即可(可以设置初值)。
属性:
value:表示选中的省市区,格式为 [‘xx省’, ‘xx市’, ‘xx区’]。
custom-item:可以为每一列的顶部添加一个自定义的选项。
注:只能添加一项。如果连续设置,只显示最后的设置
<picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="全部" custom-item="其他">
bindchange:value值改变后发生的事件。通过event.detail.value可以获取到改变后的省市区的值
注:虽然文档中还写了可以用code读取到统计用区划代码,posecode读取到邮政编码,但是实际输出的时候不知道为啥读取不到。
微信内置的省市区选择器虽然设置起来很方便,但是官方没有公开具体的省市区数据,在实际的项目中只能读取到用户所选择的省市区而已,功能不是很完善。如果有需要,可以用多项选择器来自己制作一个。
微信小程序开发笔记(1.1)滚动选择器picker的使用相关推荐
- 微信小程序开发笔记,你收藏了吗?
** 微信小程序开发笔记,你收藏了吗? ** 最近在开发微信小程序,把自己在项目中经常遇到的知识点记录下来,以便下次开发的时候查看. 开发小程序开发工具推荐vscode写代码,微信开发工具用于查看效果 ...
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- 微信小程序开发笔记二(WXSS和CSS样式美化)
微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...
- 微信小程序开发笔记——wsdchong
微信小程序开发笔记 一.小程序简介 小程序起源于微信的webview:此类API最初是提供给腾讯内部一些业务使用,很多外部开发者发现后,照葫芦画瓢,逐渐成为微信中网页的事实标准.2015年初,微信发布 ...
- 微信小程序开发笔记 进阶篇③——onfire.js事件订阅和发布在微信小程序中的使用
文章目录 一.前言 二.onfire.js介绍 三.API介绍 四.实例应用 五.onfire源码 六.实例源码 一.前言 微信小程序开发笔记--导读 二.onfire.js介绍 一个简单实用的事件订 ...
- 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- 微信小程序开发笔记 支付篇②——微信小程序通过小程序云实现微信支付功能
文章目录 一.前言 二.开通微信支付 2.1 关联商户号 2.2 添加商户号 2.3 管理员授权 三.云函数开发 3.1 新建云函数 3.2 云函数代码 3.3 云函数上传并部署 四.小程序调用 4. ...
- 微信小程序开发笔记—设置页面密码
文章目录 一.功能概述 二.实现效果 三.实现方法 1.新建个人登陆页面 2.设计密码获取判别函数和响应函数 1)定义变量 2)设计密码获取判别函数 3)设计响应函数 3.设计页面内容 1)input ...
最新文章
- 【OpenCV】cv::Mat和std::vector之间的相互转换
- Linux命令之route - 显示和操作IP路由表
- 将excel中是数据导入数据库
- Datatable中对某列求和,三种不同情况下的方法 .
- 用ftp、http搭建网络yum源
- C语言函数调用的原理
- 201521123054《Java程序设计》第1周学习总结
- Android使用C/C++来保存密钥
- 页面url带参数_微信小程序云开发教程微信小程序的JS高级页面间数据传递
- 将hls生成的IP添加到vivado2018
- Shell获取多行输入并输出每行的第3个字符
- ExtJS(5)- Ext5的统计图Chart
- ISP之色差增益抑制(Chroma Gain Suppression)
- 收集最全的工业软件大集合
- 阿里云服务器桌面版配置
- ff14 掉线 服务器维护,《FF14》29日更新维护 暂不推出手工补丁
- 正确率/精度(precision),召回率(recall),F1-score,ROC 曲线,AUC值
- A Game of Thrones(24)
- C++(Qt) 和 Word、Excel、PDF 交互总结
- java简单的记事本程序_如何用JAVA编写简单的记事本程序?
热门文章
- 气质后天可以养成吗?
- 学习电路的第一天(项 延迟)
- tintColor和backgroundColor的区别
- win10 软路由_从听说到上手,人人都能看懂的软路由入门指南
- 十年来高薪专业变成了它——信息安全
- php 中级代码大全(本教程需要一定基础)
- rpv9服务器型号,魔兽世界RP服务器是什么?怀旧服RP服务器有什么不同
- 小米3S或采用5.5寸1080p屏 配3G内存支持4G
- [艾兰岛][Ylands]从0开始学游戏开发_14.钩肥大战
- 给定字符串提取姓名(字符串、list、re“零宽断言”)