news 2026/5/30 23:02:19

对于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/5/29 1:34:31

java+vue基于springboot框架的社区智慧养老系统

目录社区智慧养老系统摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;社区智慧养老系统摘要 系统背景 随着人口老龄化加剧&#xff0c;传统养老模式难以满足多样化需求。基于SpringBoot和Vue的社区智慧养老系统整合物联网、…

作者头像 李华
网站建设 2026/5/28 19:03:38

芒格的“逆向思维“:在市场共识中寻找投资机会

芒格的"逆向思维"&#xff1a;在市场共识中寻找投资机会 关键词&#xff1a;芒格、逆向思维、市场共识、投资机会、价值投资 摘要&#xff1a;本文深入探讨了芒格的逆向思维在投资领域的应用&#xff0c;即在市场共识中寻找投资机会。首先介绍了文章的背景&#xff0…

作者头像 李华
网站建设 2026/5/28 16:39:30

数字图像处理篇---YPbPr颜色空间

一句话核心YPbPr是YUV的“物理实现版”&#xff0c;通过三根独立的线缆分别传输亮度(Y)和两个色差信号(Pb, Pr)&#xff0c;实现了比传统复合视频更好的画质。1. 为什么需要YPbPr&#xff1f;—— 画质追求在模拟视频时代&#xff0c;信号传输主要有三种方式&#xff1a;复合视…

作者头像 李华
网站建设 2026/5/30 11:57:24

数字图像处理篇---描述颜色地的红、绿、蓝、黄

为什么我们常用红、绿、蓝、黄&#xff08;有时还有青、品红&#xff09;来描述颜色&#xff0c;而不是其他组合&#xff1f;这背后是人眼生理结构、色彩科学历史和人类文化共同作用的结果。一句话核心因为这套颜色描述系统完美对应了&#xff1a;1&#xff09;人眼细胞的生理特…

作者头像 李华
网站建设 2026/5/29 18:46:32

基于小样本学习的滚动轴承故障诊断方法研究

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。1)多尺度分解与自注意力机制融合的孪生网络诊断方法。针对小样本条件下特征提取不充分…

作者头像 李华