微信小程序中@vant/weapp的组件van-calendar及van-picker显示异常问题

本文讲述了作者在处理新项目时遇到的小程序vant组件显示异常问题,涉及picker和calendar组件在不同环境下的显示问题,以及解决过程中尝试的技术路径和最终解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小程序vant显示异常问题

背景

新的紧急项目又来了,新的紧急项目又在年前来了,新的要求一个月内完成的紧急项目又在年前来了…(老板说了,做不完,过年给三工,不能走!!!)

前言

由于新的项目需求将来部署环境可能设计小程序及PC端,在技术选型的时候也增纠结过uniapp+uView2.0还是微信小程序原生+vant。当然了,从标题想必也看出来我选了什么了。本来以为会很顺利的将页面原型百分之九十九点九九九九…的还原出来,但是往往事非人愿,新建了小程序并集成了weapp vant以后,并非一帆风顺

过程

在某个页面使用到picker进行选择的时候,由于是在屏幕中间进行选择的,固使用了popup+picker的组合,当显示了toolbar的标题及按钮时,在模拟器上一切都很正常,但当预览的时候发现,上下两个toolbar!!!当我的心情就是:沃德法克???
曾怀疑是popup的问题,后发现隐藏toolbar就没问题了…后着急赶项目(赖的继续研究以为的组件bug)就隐藏了toolbar然后自定义了一个顺利解决该显示问题。
万万没想到的是,事情并没有因为绕过这个问题而结束。当用到calendar显示日历的时候…它在真机上就老老实实的平铺在页面下面,甚至还能滚动页面看到更多日期。联想到之前的picker问题…看来确实需要解决这个拦路虎了
在这里插入图片描述

在这里插入图片描述
一开始也曾怀疑是vant的版本问题,遂找了一个以前的项目vant版本修改并重新install构建npm…然并卵
后怀疑是project.config.json中配置问题,还是老项目,复制粘贴…还并卵
最后想到了升级skyline的提示以优化内容,将skyline设为false,还是不行。

结果

删一行代码

"componentFramework": "glass-easel",
### 微信小程序实现日历日程功能 #### 创建项目结构 为了构建一个简易的日程管理应用,在微信开发者工具中新建项目并设置好基础配置文件`app.json`以及页面路径。确保引入必要的UI库来增强用户体验。 ```json { "pages":[ "pages/index/index" ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle":"black" }, "usingComponents": { "van-datetime-picker": "@vant/weapp/datetime-picker/index", "van-popup": "@vant/weapp/popup/index" } } ``` 此部分展示了如何通过修改`app.json`中的`usingComponents`字段集成Vant WeApp组件[^3]。 #### 页面布局设计 在`index.wxml`里定义界面元素,包括日期选择器和事件列表展示区: ```html <view class="container"> <!-- 日历显示 --> <ui-calendar displayTime="{{CalendarDisplayTime}}"></ui-calendar> <!-- 添加新日程按钮 --> <button bindtap="showPopup">新增日程</button> <!-- 弹窗用于输入详情 --> <van-popup :show="isShow" position="bottom"> <van-datetime-picker type="datetime" @confirm="onConfirm" @cancel="closePopup"/> </van-popuP> <!-- 展示已有的日程条目 --> <block wx:for="{{scheduleList}}" wx:key="id"> <text>{{item.title}}</text><br/> </block> </view> ``` 上述代码片段利用了来自Vant UI库的时间选择控件,并实现了基本的视图逻辑[^2]。 #### 数据绑定与交互处理 接下来是在对应的JS文件(`index.js`)内完成数据初始化、方法声明等工作: ```javascript Page({ data:{ CalendarDisplayTime:'', // 当前选中的时间戳字符串 isShow:false, // 控制弹层显隐状态 scheduleList:[], // 存储所有的预约事项数组 }, onLoad:function(options){ const now = new Date(); this.setData({CalendarDisplayTime:new Date().toLocaleString()}); }, showPopup(){ this.setData({isShow:true}); }, closePopup(){ this.setData({isShow:false}); }, onConfirm(e){ let timeStr=e.detail; console.log('Selected Time:',timeStr); // 假设这里会获取到用户填写的内容作为title var newItem={id:scheduleList.length,title:'Meeting'}; this.data.scheduleList.push(newItem); this.closePopup(); } }) ``` 这段脚本负责监听用户的操作行为,比如点击“新增日程”触发弹框出现;当确认选定具体时刻后,则更新界面上呈现的信息集合[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值