news 2026/5/1 6:29:20

对于vant picker和datetime-picker二次封装分享

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对于vant picker和datetime-picker二次封装分享

文章目录

    • 概要
    • 前置知识点
    • 直接上组件代码
    • datetime-picker组件代码

概要

我们日常开发中使用vant实现下拉列表,很多时候绑定的都是对象数组,折腾一下也能搞,但是每次都会写一大堆代码

//template<van-field readonly clickable name="picker":value="searchPopup.warehouseNumber.description"label="仓库"placeholder="点击选择"@click="searchPopup.warehouseNumber.show = true"/><van-popup v-model="searchPopup.warehouseNumber.show"position="bottom"><van-picker show-toolbar:columns="warehouses"value-key="Description"text-key="Code"@confirm="searchPopup.warehouseNumber.onConfirm"@cancel="searchPopup.warehouseNumber.show = false"/></van-popup>//datasearchPopup:{show:false,warehouseNumber:{show:false,description:'',onConfirm:(value)=>{this.searchPopup.warehouseNumber.description=value.Descriptionthis.searchInfo.WarehouseNumber=value.Codethis.searchPopup.warehouseNumber.show=false}}},searchInfo:{WarehouseNumber:''}

这样一大坨重复写就很不爽啊,所以打算抽离出组件,最后我要的用法就是

<MyPicker label="仓库":columns="warehouses"valueKey="Description"textKey="Code"v-model="searchInfo.WarehouseNumber"/>

这里需要说明下我们的columns的结构

[{Code:0,Description:'仓库1'},{Code:1,Description:'仓库2'}]

前置知识点

有个前置知识点需要解释下,不然有的朋友可能代码会看的有点懵
vue2里面有个语法糖,就是v-model等价于:1、组件有个名为value的props,然后v-model变量就绑定到这个value的props上的;2、组件内部抛出的一个事件名为input的事件,事件的值就绑定到v-model这个变量上了

直接上组件代码

<template><div><van-field readonly clickable:value="displayText":label="label"placeholder="点击选择"@click="show = true"/><van-popup v-model="show"position="bottom"><van-picker show-toolbar:columns="columns":value-key="valueKey":text-key="textKey"@confirm="onConfirmHandler"@cancel="show = false"/></van-popup></div></template><script>exportdefault{props:['label','columns','valueKey','textKey','value'],data(){return{show:false}},mounted(){},computed:{displayText(){if(!this.value||!this.columns.length)return''constitem=this.columns.find(item=>item[this.textKey]===this.value)returnitem?item[this.valueKey]:''}},methods:{onConfirmHandler(value){this.$emit('input',value[this.textKey])this.show=false}},}</script><style scoped></style>

datetime-picker组件代码

<template><div><van-field readonly clickable:value="displayValue":label="label"placeholder="点击选择"@click="show = true"/><van-popup v-model="show"position="bottom"><van-datetime-picker show-toolbar v-model="internalValue"type="datetime"title="选择时间"@cancel="show = false"@confirm="onConfirmHandler"/></van-popup></div></template><script>import{formatDateTime}from'@/utils/Common'exportdefault{props:['label','value'],data(){return{show:false,internalValue:this.value||newDate()}},mounted(){},computed:{displayValue(){returnthis.value?formatDateTime(this.value):''}},methods:{onConfirmHandler(value){this.$emit('input',formatDateTime(value))this.show=false}},}</script><style scoped></style>

那个格式化时间就安装moment就行

使用示例

<MyDatetimePicker label="创建时间"v-model="createDatetime"/>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 22:30:44

ESP32-S3 PSRAM扩展配置:一文说清连接原理

ESP32-S3 PSRAM扩展实战手记&#xff1a;从焊错引脚到稳定跑满8MB的全过程你有没有试过——LVGL界面一动就卡顿&#xff0c;TensorFlow Lite模型加载直接失败&#xff0c;malloc()返回空指针&#xff0c;串口只打出半句日志就哑火&#xff1f;我第一次把APS6404L焊上ESP32-S3开…

作者头像 李华
网站建设 2026/4/23 14:18:22

Raspberry Pi OS 64位下ROS2安装超详细版教程

Raspberry Pi 5 ROS2 Humble&#xff1a;在 Bookworm 64 位系统上跑通一个真正能干活的机器人节点你刚拿到那块闪着金属光泽的树莓派5&#xff0c;拆开散热片、插好TF卡、烧入最新版 Raspberry Pi OS Bookworm 64-bit —— 然后兴冲冲敲下sudo apt install ros-humble-desktop…

作者头像 李华
网站建设 2026/4/22 8:49:49

Python基于Vue的健身房管理系统设计与实现 django flask pycharm

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 随着时代的…

作者头像 李华
网站建设 2026/4/23 10:00:20

如何判断一个程序员的技术比你强?

在程序员的圈子里,衡量水平的标准绝不是“谁头发更少”或者“谁加班更晚”。真正的技术压制,往往发生在一些不经意的瞬间。当你觉得大家都在写业务代码实现功能时,大佬已经在另一个维度审视系统了。 以下是几个判断“技术压制”的核心标准,看看你身边有没有这种人。 一、…

作者头像 李华
网站建设 2026/4/25 17:26:30

提示工程架构师的创新思维:小步快跑的提示迭代方法论

提示工程架构师的创新思维:小步快跑的提示迭代方法论 一、从“大败局”到“小胜仗”:为什么传统提示设计会失效? 1.1 一个真实的“提示翻车”案例 半年前,我帮某电商公司设计智能客服提示。产品经理的需求很明确:“要能回答订单查询、退款流程、物流跟踪、商品售后四大…

作者头像 李华