1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序Picker自定义数据多级联动

微信小程序Picker自定义数据多级联动

时间:2020-05-23 11:20:04

相关推荐

微信小程序Picker自定义数据多级联动

文章目录

示例视频官方文档Picker使用多级picker多级联动代码示例

hello,i’m Shendi

最近在整微信小程序,在 picker 这个地方卡了很久,这里总结一下

示例视频

小程序picker多级联动示例视频

官方文档

https://developers./miniprogram/dev/component/picker.html

Picker使用

如果只需要弹出选择一个条目,实现起来非常简单

在 wxml 文件下加入如下代码

<picker bindchange='change' value="{{index}}" range="{{array}}"><view value='{{array[index]}}'>{{array[index]}}</view></picker>

其中 bindchange 为我们点击确定后执行的函数,value为选择条目的下标,初始为0,range为选择条目的数据体

在 js 中代码如下

Page({data: {/** 条目下标 */index : 0,/** 条目数据,是一个数组 */array : ["条目1","条目2"]},/** 确定了条目所调用的函数 */change: function (e) {// 其中 e.detail.value 为选中的条目所对应的下标,这里赋值,picker将会自行更新内容this.setData({index : e.detail.value });},

多级picker

实现多级也非常简单

首先得给picker加一个mode

例如二级联动

我们传递的数组改成数组内有两个数组即可,下标也为数组

index : [0,0],array : [["条目1","条目2"],["二级条目内容1"]]

三级联动则三个数组,n级则n数组

多级联动

有时需求是一级条目有对应的二级条目…即根据上一级自动替换下一级内容(上面视频演示的效果)

我的思路是动态替换数组,将使用到 bindcolumnchange 事件

代码示例

wxml

<picker class='title_content' mode="multiSelector" bindchange='majorClassesChange' bindcolumnchange='majorCLassesColumnChange' value="{{majorClassesIndex}}" range="{{majorClasses}}"><view style="display: inline-block"><text style="color: #757575">专业班级</text><view style="margin-top: 12rpx"><text value='{{majorClasses[0][majorClassesIndex[0]]}}'>{{majorClasses[0][majorClassesIndex[0]]}}</text><text style='margin-left:12rpx;' value='{{majorClasses[1][majorClassesIndex[1]]}}'>{{majorClasses[1][majorClassesIndex[1]]}}</text></view></view></picker>

js部分

Page({data: {// 专业班级majorClassesIndex : [0,0],majorClasses: [["专业1", "专业2"], []],// 专业与班级对应表,用于动态修改classes : [{major : "专业1",classes : ["1班","2班","3班"]},{major : "专业2",classes : ["4班","5班"]}],},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {var that = this;// 初始化专业班级的第一个数据var majorClasses = this.data.majorClasses;majorClasses[1] = this.data.classes[0].classes;this.setData({majorClasses : majorClasses});},/** 专业班级列切换 */majorCLassesColumnChange : function (e) {// 专业列修改则更改绑定数据的对应班级,实现联动效果if (e.detail.column == 0) {var major = this.data.majorClasses[0][e.detail.value];var classes = this.data.classes;// 这里可以自行更改,例如通过下表来获取// 循环获取指定专业对应的班级列表for (var i = 0; i < classes.length; i++) {if (classes[i].major == major) {var majorClasses = this.data.majorClasses;majorClasses[1] = classes[i].classes;var majorClassesIndex = this.data.majorClassesIndex;majorClassesIndex[0] = e.detail.value;majorClassesIndex[1] = 0;// 只能用setData修改数据this.setData({majorClasses : majorClasses,majorClassesIndex : majorClassesIndex});break;}}}},/** 用户修改了专业班级校 */majorClassesChange : function (e) {this.setData({majorClassesIndex:e.detail.value });},

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。