微信小程序封装vant 下拉框select 多选组件

老规矩先上效果图:

本组件主要由小程序vant ui组件,vant 小程序ui网址:vant-weapp

主要代码如下:

先封装子组件: select-checkbox  放在 components 文件夹里面

 select-checkbox.wxml:

<view>
    <van-field label="{{label}}" model:value="{{ checkSelected }}" required placeholder="{{ place }}" border="{{ true }}" readonly
        right-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-cell
                    wx:for="{{ list }}"
                    wx:key="index"
                    title="{{ item }}"
                    value-class="value-class"
                    clickable
                    data-index="{{ index }}"
                    title-width="94%" 
                    center
                    bind:click="toggle"
                >
                <van-checkbox
                    catch:tap="noop"
                    label-position="right"
                    class="checkboxes-{{ index }}"
                    name="{{ item }}"
                />
                </van-cell>
            </van-cell-group>
        </van-checkbox-group>
    </van-popup>
</view>




select-checkbox.wxss:

/* pages/select-checkbox/select-checkbox.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;
}

select-checkbox.js:

// pages/select-checkbox/select-checkbox.js
Component({
    /**
     * 组件的属性列表
     */
    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: [],
    },
    /**
    * 组件的方法列表
    */
    methods: {
       // 取消
        cancel() {
            this.setData({ show: false })
        },
        // 确定
        confirm() {
            this.setData({ show: false })
            this.triggerEvent('sync', {  // 传递到组件外事件 , 返回当前选中项 对象
                value: this.data.checkSelected
            })
        },

        showPopup() {
            this.setData({ show: true })
        },
        onClose() {
            this.setData({ show: false })
        },
        onChange(event) {
            // console.log('event:', event)
            this.setData({
                result: event.detail,
                checkSelected: event.detail.join(',')
            })
            // console.log('this.data.checkSelected:', this.data.checkSelected)
        },
        toggle(event) {
            const { index } = event.currentTarget.dataset
            const checkbox = this.selectComponent(`.checkboxes-${index}`)
            checkbox.toggle()
        },
        noop() {},  
    },
    attached: function () {
        console.log("父组件传过来:", this.properties.checkSelected) // 可以获取父组件传过来的值
    },
})

select-checkbox.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"
    }
}

父组件调用:

<view>
    <select-checkbox style="width:100%" label="白蚁种类:" title-width="70" place="请选择白蚁种类" list="{{ list }}" bind:sync="getSelectBox" checkSelected=""></select-checkbox>
</view>
data: {
        checkSelected: '',
        list: ['黑翅土白蚁', '黄翅大白蚁', '台湾乳白蚁', '黑胸散白蚁' ],
    },
    // 获取选中的值
    getSelectBox: function(e) {
        // 打印选中项
        console.log("11111111:", e.detail.value)
        this.setData({
            checkSelected: e.detail.value
        })
    },
{
    "usingComponents": {
        "select-checkbox": "/components/select-checkbox/select-checkbox"
    }
}

本组件只要用 vant-checkbox  组件,外套用了 点击弹出vant-popup 弹层,然后封装成组件的模板,全局调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/287641.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1月3日代码随想录反转二叉树

226翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,…

HarmonyOS调研分享

经过十多年的发展&#xff0c;传统移动互联网的增长红利已渐见顶。万物互联时代正在开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年&#xff0c;全球物联网终端连接数量将达 246 亿个&#xff0c;其中消费物联网终端连接数量将达 11…

Kaggle:数据科学竞赛的殿堂与个人成长的舞台

一、产品简介&#xff1a; 它是一个举办数据科学竞赛、托管数据库、编写和分享代码的在线平台。这个数据集就像一个超级大的信息库&#xff0c;包含了我们日常生活中的各种事情&#xff0c;比如电子游戏的销量啊&#xff0c;还有空气质量如何受到污染等等。这些信息都是现实中…

中学生适宜用什么样的台灯?分享适合中学生的护眼台灯

现在的学生都面临着很大的学习压力&#xff0c;每天长时间的用眼&#xff0c;加上缺少户外运动&#xff0c;这也导致国内大多数青少年学生都存在近视的现象。所以保护眼睛、保护孩子视力健康这件事是刻不容缓的&#xff0c;而我们能为孩子做的就是监督孩子养成良好的用眼习惯&a…

javascript 常见工具函数(三)

21.克隆数组的几种方法&#xff1a; &#xff08;1&#xff09;slice方法&#xff1a; let arr [1,2,3,4] let arr1 arr.slice() //或者是 let arr1 arr.slice(0) arr[0] 6 console.log(arr) // [6, 2, 3, 4] console.log(arr1) // [1, 2, 3, 4] &#xff08;2&…

docker安装esrally教程

本来用源码安装&#xff0c;首先要安装git,python,jdk&#xff0c;还要配环境特别繁琐&#xff0c;好不容易安装好后运行报如下错误&#xff0c;在官网和github搜不到解决方案&#xff0c;无奈之下只能用docker安装。 [ERROR] Cannot race. Error in load generator [0]Cannot…

MS5148T荣获2023电子信息半导体行业年度卓越产品

MS5148T是一款适合高精度、低成本测量应用的24bit模数转换器。内部集成了低噪声可编程增益放大器、高精度Δ-Σ模数转换器和内部振荡器、低温漂基准和两路匹配的可编程电流源&#xff0c;以及传感器检测Burnout电流源和偏置电压产生器&#xff0c;支持四路差分输入。 主要特点…

设计模式之建造者模式【创造者模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

rime中州韵小狼毫 inputShow lua Filter 输入字符透传滤镜

在 rime中州韵小狼毫 inputShow lua Translator 一文中&#xff0c;我们通过 inputShow.lua 定制了 inputShow_translator&#xff0c;这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下&#x1f447;&#xff1a; &#x1f446;上图中我们在候选列表中看到了…

excel需要把一个表格的信息放到另一个表格中,但是两个表格列的顺序不同,用VLOOKUP函数

情景再现&#xff1a; 图1 图2 任务&#xff1a;图1中信息不全&#xff0c;需要把图2中的身份证号和手机号填到图1中&#xff0c;且需保持图1人员顺序不变。 困难之处&#xff1a;1.目前人员较少&#xff0c;尚且可以搜索着一个个输入&#xff0c;但如果好几百好几千人呢&am…

学习Vue及项目工程化

学习Vue及项目工程化 Vue快速上手插值表达式 Vue基本命令v-htmlv-showv-if 和 v-else 和 v-else-ifv-on和click函数调用v-bindv-for案例--书架 v-model功能总结 综合案例-小黑记事本列表渲染删除功能添加功能底部统计清空 项目工程化更换npm镜像方式一&#xff1a;在网页是去创…

RKE安装k8s及部署高可用rancher之证书在外面的7层LB(nginx中) 7层负载均衡

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种&#xff1a;单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境&#xff0c;而且单节点安装和高可用集群安装之间不能进行数据迁移&#xff0c;所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

初学者快速入门学习日语,PDF文档音频教学资料合集

一、资料描述 本套学习资料是很全面的&#xff0c;共有734份文件&#xff0c;包括PDF&#xff0c;PPT&#xff0c;表格&#xff0c;图片&#xff0c;音频等多种格式&#xff0c;可以作为初级日语的学习教材&#xff0c;也是非常适合初学者入门的&#xff0c;可以帮助大家快速的…

在macOS中搭建.NET MAUI开发环境

文章目录 准备安装扩展安装 .NET安装工作负载安装 Xcode 命令行工具调试安卓应用安装 JDK安装 Android SDK 安装 Android 模拟器安装模拟器安装镜像创建虚拟机 同意许可条款创建 MAUI 项目调试 MAUI 应用切换调试目标 参考资料 准备 一台 macOS Monterey 以上的电脑安装 XCode…

Android14之audit2allow自动生成Selinux规则(一百七十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

软考网络工程师教程第五版(2018最新版)

软考网络工程师教程第五版(2018最新版) 内容简介 本书是全国计算机技术与软件专业技术资格(水平)考试指定用书。作者在前4版的基础上,根据网络工程师新版大纲的要求,针对考试的重点内容做了较大篇幅的修订,书中主要内容包括数据通信、广域通信网、局域网、城域网、因特网…

Vue实现JSON字符串格式化编辑器组件

相信很多同学都用过网上的在线JSON格式化工具来将杂乱的JSON数据转换成易于我们阅读和编辑的格式。那么&#xff0c;你有没有想过自己动手实现一个这样的工具呢&#xff1f;今天&#xff0c;我将介绍如何使用Vue.js来构建一个简单的JSON格式化工具。 功能简述 支持格式化JSON字…

一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 大小端字节序

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! Hello&#xff0c;大家好我是硬核王同学&#xff0c;是一名刚刚工作一年多的Linux工程师&#xff0…

2024年【陕西省安全员A证】考试报名及陕西省安全员A证模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员A证考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新陕西省安全员A证模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过陕西省安全员A证作业模拟考试很简单。 1、【多选题】《建…

基于ssm的职业高中学情成绩系统设计论文

摘 要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…