尧图网络科技 Logo 尧图网络科技
  • 首页
  • 关于我们
  • 建站服务
  • UI 设计
  • 案例展示
  • SEO 优化
  • 资讯中心
  • 联系我们

资讯详情

深度解读 · 专业分析

  • 首页
  • 资讯中心
  • /
  • 微信小程序在vant框架的基础上自定义多选框

最新资讯

  • 全部资讯
  • 行业动态
  • UI 设计
  • SEO 优化
  • 网站开发

微信小程序在vant框架的基础上自定义多选框

📅 发布时间:2026/6/22 18:10:06 👁 浏览次数:
微信小程序在vant框架的基础上自定义多选框

微信小程序在vant框架的基础上自定义多选框

1 简介

  微信小程序官方和vant框架都没有提供很方便的多选框,所以自己定义一个组件

 

2 代码 select-checkbox

2.1 json

{"component": true,"usingComponents": {"van-field": "@vant/weapp/field/index","van-popup": "@vant/weapp/popup/index","van-cell": "@vant/weapp/cell/index","van-cell-group": "@vant/weapp/cell-group/index","van-checkbox": "@vant/weapp/checkbox/index","van-checkbox-group": "@vant/weapp/checkbox-group/index"}
}

 

2.2 wxss

.van-cell__value {text-align: left !important;
}
.cityheader {width: 100%;z-index: 5;
}
.city-cancel {float: left;margin: 20rpx;color: #969799;z-index: 11;position: relative;
}
.city-true {float: right;margin: 20rpx;color: #576b95;z-index: 11;position: relative;
}

 

2.3 wxml

2.3.1 代码

<view><van-field label="{{label}}" model:value="{{ checkSelected }}" placeholder="{{ place }}" border="{{ true }}" readonlyright-icon="{{icon}}" bindtap="showPopup" /><van-popup show="{{ show }}" bind:close="onClose" position="bottom" custom-style="height: 60%;overflow:hidden;padding:10rpx 0rpx;"><!-- 取消、确定按钮 --><view class="cityheader"><view bindtap="cancel" class="city-cancel">取消</view><view bindtap="confirm" class="city-true">确定</view></view><!-- 内容区域 --><van-checkbox-group value="{{ result }}" bind:change="onChange"><van-cell-group><van-cellwx:for="{{ list }}"wx:key="index"title="{{ item.label }}"value-class="value-class"clickabledata-index="{{ index }}"title-width="94%" centerbind:click="toggle"><van-checkboxcatch:tap="noop"label-position="right"class="checkboxes-{{ index }}"name="{{ item.ind }}"/></van-cell></van-cell-group></van-checkbox-group></van-popup>
</view>

 

2.3.2 说明

1)整体代码说明

  分为两部分,van-field就是黄色框部分,就叫选择框。van-popup 下面的就是蓝色框部分,就叫选择面板。

image

 

2)选择面板代码van-cell说明

image

 

  list:数据集合,格式:list: [{label:'黑翅土白蚁',value:'101',ind:'0'}, {label:'黄翅大白蚁',value:'102',ind:'1'}],     

     label:名称  value:value值  ind:数组的下标 

  title:选择面板展示的名称

  image

  

 

3)选择面板代码van-checkbox说明

  name:选中的值,这里采用的ind而不是value,因为获取到数组的下标,那么就可以从数字获取到对象,那么label和value值就都有了

image

 

3)选择面板van-checkbox-group代码说明

  result:选择的值,数组格式,也就是上面的选择的ind的值的数组

image

 

 

 

2.4 js

2.4.1 代码

// pages/select-checkbox/select-checkbox.js
Component({/*** 组件的属性列表* list的格式 list: [{label:'黑翅土白蚁',value:'101',ind:'0'}, {label:'黄翅大白蚁',value:'102',ind:'1'}],*    label:名称 value:value值  ind:数组下标*/properties: {label: String, // 输入框标签place: String, // 输入框提示list: Array, // 选择器 选项checkSelected: { // 选择器 选项数组中 对象的value的默认key
          type: String,value: 'text'}},// 监听传入的变量,当传入的值发生变化时,触发方法// observers: {//     'checkSelected': function (val) {//         // val=> 就是父组件传入组件中的 tabsList 数据//         console.log('???:', val)//     }// },/*** 页面的初始数据*/data: {icon:'arrow-down',  // 下拉箭头show: false,result: [],values:[]},/*** 组件的方法列表*/methods: {// 取消
      cancel() {this.setData({ show: false })},// 确定
      confirm() {this.setData({ show: false })this.triggerEvent('sync', {  // 传递到组件外事件 , 返回当前选中项 对象value: this.data.values})},showPopup() {this.setData({ show: true })},onClose() {this.setData({ show: false })},onChange(event) {console.log('event:', event)var selectarr = event.detail // 选择的ind数组if(selectarr.length == 0){this.setData({result: [],values:[],checkSelected: ''})}else{var valuearr = [] // 选择的value数组var titlearr = [] // 选择的label数组,转换成字符串用于van-field处展示selectarr.forEach((point) => {var i = parseInt(point)console.log('point',i)console.log('properties.list[i]',this.properties.list[i])valuearr.push(this.properties.list[i].value)titlearr.push(this.properties.list[i].label)});}this.setData({result: selectarr,values:valuearr,checkSelected: titlearr.join(',')})console.log('this.data.checkSelected:', this.data.checkSelected)console.log('this.data.result:', this.data.result)console.log('this.data.values:', this.data.values)},toggle(event) {const { index } = event.currentTarget.datasetconst checkbox = this.selectComponent(`.checkboxes-${index}`)checkbox.toggle()},noop() {},  },attached: function () {console.log("父组件传过来:", this.properties.checkSelected) // 可以获取父组件传过来的值
  },
})

 

 

2.4.2 说明

1) onChange

  选择或取消选择的时候调用

  这里event.detail获取到的是选择的ind数组,需要赋值给上面提到的result

  获取到了ind数组

    就可以获取到选择的对象label数组titlearr ,转换成字符串格式,赋值给checkSelected,用于van-field处展示

    也可以获取到选择的对象的value数组valuearr :用于返回给父组件

onChange(event) {console.log('event:', event)var selectarr = event.detail // 选择的ind数组if(selectarr.length == 0){this.setData({result: [],values:[],checkSelected: ''})}else{var valuearr = [] // 选择的value数组var titlearr = [] // 选择的label数组,转换成字符串用于van-field处展示selectarr.forEach((point) => {var i = parseInt(point)console.log('point',i)console.log('properties.list[i]',this.properties.list[i])valuearr.push(this.properties.list[i].value)titlearr.push(this.properties.list[i].label)});}this.setData({result: selectarr,values:valuearr,checkSelected: titlearr.join(',')})console.log('this.data.checkSelected:', this.data.checkSelected)console.log('this.data.result:', this.data.result)console.log('this.data.values:', this.data.values)},

 

3 使用

3.1 json引入

"select-checkbox": "/components/select-checkbox/select-checkbox"

 

3.2 wxml

 <view class="search-tt2 ,require-label:before">多选: </view><view class="search-kk st"><select-checkbox style="width:100%" label="" title-width="70" place="请选择白蚁种类" list="{{ list }}" bind:sync="getSelectBox" checkSelected=""></select-checkbox></view>

 

3.3 js

  data数据

checkSelected: '',list: [{label:'黑翅土白蚁',value:'101',ind:'0'}, {label:'黄翅大白蚁',value:'102',ind:'1'}],

  回调函数

  

  // 获取选中的值
  getSelectBox: function(e) {// 打印选中项,就是选择的对象的value数组console.log("11111111:", e.detail.value)this.setData({checkSelected: e.detail.value})}

 

3.4 css

.search-tt2 {float: left;width: 180rpx;height: 80rpx;line-height: 80rpx;font-size: 32rpx;color: #333;margin-left: 70rpx; margin-top: 10px;
}.search-kk {width: calc(80% - 150rpx);height: 80rpx;border: 1px solid rgb(169, 167, 167);box-sizing: border-box;padding: 0 20rpx;line-height: 70rpx;font-size: 28rpx;color: #333;overflow-x: hidden;border-radius: 10rpx;
}.st {margin-top: 20rpx;
}

 

 

相关新闻

JVM探究(Leo)

JVM探究(Leo)

2026/6/21 15:49:42 查看详情
完整教程:第10课:Prompt工程优化:指导DeepSeek模型生成更精准的答案

完整教程:第10课:Prompt工程优化:指导DeepSeek模型生成更精准的答案

2026/6/21 10:40:30 查看详情
做题情况

做题情况

2026/6/21 19:52:07 查看详情
长沙全域品牌首饰回收靠谱商家汇总,2026 实测 8 家门店支持所有品牌首饰变现 - 逸程

长沙全域品牌首饰回收靠谱商家汇总,2026 实测 8 家门店支持所有品牌首饰变现 - 逸程

2026/6/22 18:08:02 查看详情
2026 天津各区县黄金回收攻略 本地人避坑指南各区变现方法详解 - 薛定谔的梨花猫

2026 天津各区县黄金回收攻略 本地人避坑指南各区变现方法详解 - 薛定谔的梨花猫

2026/6/22 18:08:02 查看详情
PXN20双核MCU:工业网关高集成度与实时性设计实战

PXN20双核MCU:工业网关高集成度与实时性设计实战

2026/6/22 18:08:35 查看详情
北京刑事辩护律师事务所:三大维度评估律所专业实力指南 - 品牌2026

北京刑事辩护律师事务所:三大维度评估律所专业实力指南 - 品牌2026

2026/6/22 18:07:02 查看详情
半导体湿法工艺化学品(刻蚀液/显影液/剥离液/清洗剂)过滤商家参考 - 品牌排行榜

半导体湿法工艺化学品(刻蚀液/显影液/剥离液/清洗剂)过滤商家参考 - 品牌排行榜

2026/6/22 18:05:52 查看详情
UI自动化测试实战:20个提升脚本稳定性与维护性的核心技巧

UI自动化测试实战:20个提升脚本稳定性与维护性的核心技巧

2026/6/22 18:05:52 查看详情
2026年江浙沪皖塑料件开模定制厂家实力盘点 - 起跑123

2026年江浙沪皖塑料件开模定制厂家实力盘点 - 起跑123

2026/6/22 0:01:21 查看详情
Java方法详解

Java方法详解

2026/6/22 0:01:21 查看详情
构建AI驱动的自动化测试框架:从智能体架构到工程实践

构建AI驱动的自动化测试框架:从智能体架构到工程实践

2026/6/22 0:01:21 查看详情
WSL2下部署Openclaw:Windows开发者高效落地AI智能体的实践指南

WSL2下部署Openclaw:Windows开发者高效落地AI智能体的实践指南

2026/6/22 11:51:21 查看详情
GameServerManager:游戏服务器管理的终极解决方案

GameServerManager:游戏服务器管理的终极解决方案

2026/6/22 11:53:54 查看详情
实验室无尘室设计规范解析——华川洁净 - 华川洁净

实验室无尘室设计规范解析——华川洁净 - 华川洁净

2026/6/22 3:56:29 查看详情
YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

YOLOv11涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇| 引入CMGF 引导特征融合机制,实现对不同模态特征的自适应增强与高效融合,助力多模态目标检测,小目标检测或分割有效涨点

2026/6/21 19:13:40 查看详情
E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

E-E-A-T 成第一权重:2027 年无经验内容将被彻底淘汰

2026/6/22 8:25:20 查看详情
深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

深圳福田园岭老小区搬家公司推荐 经验足师傅高效搬运攻略 - 从来都是英雄出少年

2026/6/20 22:03:27 查看详情

关于尧图

立足北京本地的一站式网站建设服务与设计教学平台,深耕企业网站定制开发、全网 SEO 优化及网络推广服务。

快速链接

  • 关于我们
  • 建站服务
  • 案例展示
  • 资讯中心

服务项目

  • 企业官网定制
  • UI 界面设计
  • SEO 优化推广
  • 移动端适配

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

地址:北京市朝阳区 XXX 路 XX 号

© 2026 尧图网络科技 版权所有 | 京 ICP 备 XXXXXXXX 号