微信小程序之利用vant-picker实现三级联动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序之利用vant-picker实现三级联动相关的知识,希望对你有一定的参考价值。

参考技术A 拟设计一个设备故障状况选择器,需要三级联动,第一级:设备大类;第二级:设备细类;第三级:故障描述,如下图:

1、需要引入vant-picker,需要定制一个数组,包含三级即[一级,一级内容,子类[二级,二级内容,子类[三级,三级内容]]],如下图

2、在vant-picker的onChange事件中,对上面数组进行分级控制。

3、难点,需要把数组按三级拆分出来,放到picker的三列中,控制不好就会各种报错。

1、json,引入vant-picker

2、wxml

绑定change confirm 2个必须事件

3、js文件

3.1 定义选项内容,需要分成三级

3.2 data 中实现picker3列

3.3 onChange 事件实现

3.4 常见问题

3.4.1 最后一级如果没有内容,vant-picker会报错,所以需要做一个空判断,如果为空,赋值一个常量

3.4.2 是使用value,还是选择使用自己定义的常量,需要调试看。value值已经获取到了三列数据,但是容易出错。我最后还是选择使用原来定义常量proSelectList。

4.1 三级数据齐全的选择

4.2 第三级如果为空,第三列使用默认数据

小程序微信商品列表的左右联动

参考技术A

先前看到网上不少大神写的demo,其菜单栏主要以 A,B,C,D等字母为主,即A,B,C,D等字母为对应该项携带的 id(id不能为汉字或纯数字)。而笔者现在写的项目菜单栏为汉字,所以需要改变数据格式,进而需要改变 wxml 中的循环嵌套和获取。以下为成型后效果,希望对读者有帮助。

实现该功能的思路:通过点击左侧滑栏的某一项,获取到该元素携带的 id ,然后动态传给右侧滑栏的 scroll-into-view ,从而实现右侧滑栏对应的该元素运动置顶。

以下为完整数据

数据格式:

/* pages/listers/listers.wxss /
/
pages/list-1/list-1.wxss */

/ 总体主盒子 /
.container
position: relative;
width: 100%;
height: 1220rpx;
background-color: #f0f4f7;
color: #939393;

/ 左侧栏主盒子 /
.nav_left
/ 设置行内块级元素(没使用定位) /
display: inline-block;
width: 100%;
height: 100%;
/ 主盒子设置背景色为灰色 /
background: #fff;
text-align: center;
/* position: fixed; /
left: 0;
top: 0;
border-top: 1rpx solid #dedede;

/
左侧栏list的item /
.nav_left .nav_left_items
background: #fff;
/
每个高30px /
height: 80rpx;
/
垂直居中 /
line-height: 80rpx;
/
再设上下padding增加高度,总高42px /
padding: 15rpx 0;
/
只设下边线 /
border-bottom: 1px solid #dedede;
/
文字14px /
font-size: 29rpx;
color: #101010;
font-weight:

/
左侧栏list的item被选中时 /
.nav_left .nav_left_items.active
/
背景色变成白色*/
background: #f0f4f7;
color: #ed1000;

/ 右侧栏主盒子 /
.scroll_right
/ 右侧盒子使用了绝对定位 /
position: fixed;
top: 0;
right: 0;
overflow: auto;
flex: 1;
/ 宽度75%,高度占满,并使用百分比布局 /
width: 75%;
height: 100%;
padding: 20rpx;
box-sizing: border-box;
background-color: #f0f4f7;
border-top: 1rpx solid #dedede;

.mink::after
display:block;content:\'\';clear:both;

.jiul,.jiul image
width: 100%;
height: 170rpx;

.minl
font-size: 29rpx;
color: #777;
text-align: left;
line-height: 60rpx;
float: left;
background: #f0f4f7;
width: 100%;
/* height: 50rpx; /

.mink
width: 100%;
background: #fff;
height: 100%;

/
右侧栏list的item /
.nav_right_items
/
浮动向左 /
float: left;
/
每个item设置宽度是33.33% /
width: 50%;
/
height: 160rpx; /
text-align: center;
color: #4a4a4a;
background: #fff;

.nav_right_items image
/
被图片设置宽高 /
width: 60px;
height: 50px;
margin-top: 15rpx;

.nav_right_items text
/
给text设成块级元素 /
display: block;
margin-top: 5rpx;
margin-bottom: 10rpx;
font-size: 26rpx;
/
设置文字溢出部分为... /
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

/
* 自定义其他点击态样式类 **/
.other-navigator-hover
background:#fff;

.scroll_left
width:25%;
height:100%;
background:#fff;
text-align:center;
position: fixed;
left: 0;top: 0

以上是关于微信小程序之利用vant-picker实现三级联动的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序三级联动地址选择器

微信小程序三级联动地址选择器

微信小程序自定义picker组件

微信小程序实现左右联动的菜单列表

微信小程序之多级联动菜单

微信小程序--多个按钮选中的联动效果