前言:
微信小程序摒除了select,因为觉得这个在移动端的操作以及显示不友好,从而产生了picker,picker也就是从底部弹起的滚动选择器,现在支持的有5种,通过mode来区分。但是呢这5种并没有包括日期时间选择权(日期和时间同时存在于picker的选择器)。因此完这里自定义了一个日期时间选择器。
多列选择器:mode = multiSelector
这里我们自定义选择器呢会用到多列选择器,它的api地址:这里
这里直接放代码吧
HTML
1 | <view class="tui-picker-content"> |
JavaScript
1 | var dateTimePicker = require('../../utils/dateTimePicker.js'); |
封装的组件dateTimePicker.js
1 | function withData(param) { |
这里直接拿去用就完事了, 重点讲讲无比坑人的组件封装
组件封装
由于许多地方都需要用到日期时间选择器,因此为了代码的简(zhuang)洁(bi),我准备把它封装成一个组件,小程序自定义组件有点坑呐,反正官方看不到,我随便说hhh。这里picker是组件,index是需要使用组件的界面
构建目录
首先先创建一个目录为了存放公用组件
Component构造器
组件的构造跟普通的界面可不一样,它没有普通界面的生命周期(onLoad,onShow之类的),他的定义段和示例方法可以看这里
先奉上部分代码
picker
1 | var dateTimePicker = require('../../utils/dateTimePicker.js'); |
这里我只用了众多定义段的其中三条,其他的自己去api里边看
- data:组件的内部数据,和 properties 一同用于组件的模版渲染
- ready:组件生命周期函数,在组件布局完成后执行,此时可以获取节点信息(注意这里不是onLoad)
- methods:组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 组件事件
我在methods里面放着日期时间选择器的changeDateTime、changeDateTimeColumn方法,在ready里边放着上边onLoad里面的代码(自己去上边看哈)
自定义组件
我们要在自定义组件里面picker.json文件添加以下参数,意思是“我是组件”
picker
1 | { |
使用组件
首先要在使用的地方的json文件添加以下参数
index
1 | { |
这样的话我们自定义的组件的标签就是my-picker了,然后呢我们在页面里边使用他
index
1 | <my-picker class="picker" bindmyevent="onMyEventStart"></my-picker> |
组件的通讯
这个组件是日期时间选择器嘛,所以得获取到选择好的时间,这里是这么写的
picker
1 | changeDateTime(e) { |
我们通过 myevent这个事件,将值 myEventDetail传入页面中。页面接收的方法是这样的
index
1 | <my-picker class="picker" bindmyevent="onMyEventStart"></my-picker> |
bindmyevent 绑定了 ‘myevent’ 这个事件,这个事件如果触发了,执行onMyEventStart 方法
index
1 | // 活动开始时间 |
如果需要多次调用这个组件的话,只要改变他的函数即可
index
1 | <my-picker class="picker" bindmyevent="onMyEventStart"></my-picker> |
1 | // 活动开始时间 |
效果
有点多,毕竟结合和两个模块,本想着要不分开写的,想想连着写效果还是好点。这里的代码复制过去应该能直接拿来用吧。好了今天就说到这里了,谢谢能看到最后的兄弟,希望能帮得到大家。