本文为作者行舟客投稿,
原文地址:https://blog.csdn.net/qq_43624878/article/details/109284502?utm_source=app
完整项目地址:https://github.com/1314mxc/yunUI
点击阅读原文即可打开github,欢迎点赞!
背景
自从上一篇文章:微信小程序自定义日历组件及flex布局最后一行对齐问题分析 出来以后,有人私聊我说能不能从头分析一下我开源的自定义组件?一直没时间。这不,最近项目中有个需求是 省市区三级联动 ,我就顺便从组件库中的第一个 「扩展日期-时间(点此直接至GitHub)」picker组件开始说一下这两个功能的实现。
简单说一下“自定义日期-时间组件”
它的背景是项目的第一版当时发现微信小程序内置的日期组件:picker只能精确到某一天(年月日),但是我们很多时候需要年月日时分甚至是年月日时分秒(如结束时间/发布时间)。
笔者仔细翻阅了官方文档和许多博主文章发现提出了各种各样的解决方案(但很遗憾没发现有博主详细公开代码),但是对于这样一个其实并不需要“联动”、列数也不固定的功能,用多列picker模拟多列选择器 即可。
<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{
{multiIndex}}" range="{
{multiArray}}">
<input value='{
{time}}' readonly="" disabled="true" placeholder='{
{defaulttext}}' />
</picker>
其中 readonly="" disabled="true"
的作用是使“input聚焦时软键盘不弹出”(两个属性作用一样,都写是因为Android和iOS的兼容性问题)。
★用input代替view是因为input的placeholder可以方便实现“无选中时默认提示”的效果。
”
主要实现策略
如上所示,监听了两个事件,分别是:日期选择窗口弹出时以及点击“确定”按钮时触发函数change、多列选择器每一列滑动时触发事件columnchange。
change中很简单:只需要把选中的数据暴露给页面中&