nav | group | toc | ||||||
---|---|---|---|---|---|---|---|---|
|
|
content |
相比于原生 my.datePicker
,实现了 iOS 与 Android 端体验一致。
在 index.json
中引入组件
"usingComponents": {
#if ALIPAY
"ant-date-picker": "antd-mini/es/DatePicker/index",
"ant-range-picker": "antd-mini/es/DatePicker/RangePicker/index"
#endif
#if WECHAT
"ant-date-picker": "antd-mini/DatePicker/index",
"ant-range-picker": "antd-mini/DatePicker/RangePicker/index"
#endif
}
defaultValue
属性为dayjs
能够解析的时间戳或对象。
<ant-date-picker
min="{{min}}"
max="{{max}}"
defaultValue="{{defaultDate}}"
placeholder="请选择"
#if ALIPAY
onPickerChange="handlePickerChange"
onVisibleChange="handleTriggerPicker"
onCancel="handleDismiss"
onOk="handleOk"
#endif
#if WECHAT
bindpickerchange="handlePickerChange"
bindvisiblechange="handleTriggerPicker"
bindcancel="handleDismiss"
bindok="handleOk"
#endif
/>
Page({
data: {
min: new Date('2019/01/15').getTime(),
max: new Date('2023/08/20').getTime(),
defaultDate: new Date('2019/02/02').getTime(),
},
handlePickerChange(date, dateStr, e) {
console.log('onPickerChange', date, dateStr, e);
},
handleTriggerPicker(visible, e) {
console.log('onVisibleChange', visible, e);
},
handleDismiss(e) {
console.log('e', e);
},
handleOk(date, format, e) {
console.log('onOk', date, format, e);
},
});
precision
属性可以控制选择的时间精度。format
属性用来格式化展示的value
值。
<ant-date-picker precision="year" format="YYYY"/>
<ant-date-picker precision="month" format="YYYY-MM"/>
<ant-date-picker precision="minute" format="YYYY-MM-DD HH:mm"/>
disabled
属性用来控制禁用状态。
<ant-date-picker defaultValue="{{defaultDate}}" disabled />
传入函数
onFormatLabel
,返回值则是选择面板中每列想要渲染的数据
<ant-date-picker onFormatLabel="{{handleFormatLabel ? handleFormatLabel : 'handleFormatLabel'}}" />
Page({
data: {
#if WECHAT
handleFormatLabel(type, value) {
return String(value);
},
#endif
},
handleFormatLabel(type, value) {
return String(value);
},
});
控制选择的值,需要
value
属性和onOk
事件配合使用。控制面板显示关闭状态,需要visible
属性和onVisibleChange
事件配合使用。
<ant-date-picker
visible="{{pickerVisible}}"
value="{{pickerValue}}"
#if ALIPAY
onVisibleChange="handleTriggerControlledPicker"
onOk="handleControlledOk"
#endif
#if WECHAT
bindvisiblechange="handleTriggerControlledPicker"
bindok="handleControlledOk"
#endif
/>
Page({
data: {
pickerVisible: false,
pickerValue: new Date('2019/02/02').getTime(),
},
handlePickerChange(date, dateStr, e) {
console.log('onPickerChange', date, dateStr, e);
},
handleControlledOk(value) {
#if WECHAT
this.setData({
// 微信只支持传递时间戳
pickerValue: value.detail.getTime(),
});
#endif
#if ALIPAY
this.setData({
pickerValue: value,
});
#endif
},
handleTriggerControlledPicker(visible, e) {
#if WECHAT
console.log('handleTriggerControlledPicker', visible);
this.setData({
pickerVisible: visible.detail,
});
#endif
#if ALIPAY
console.log('handleTriggerControlledPicker', visible, e);
this.setData({
pickerVisible: visible,
});
#endif
},
});
引入
ant-range-picker
组件,即可拥有时间范围选择能力。
<ant-range-picker
placeholder="请选择"
defaultValue="{{defaultDateRange}}"
#if ALIPAY
onPickerChange="handlePickerRangeChange"
onVisibleChange="handleTriggerPicker"
onOk="handleRangeOk"
#endif
#if WECHAT
bindpickerchange="handlePickerRangeChange"
bindvisiblechange="handleTriggerPicker"
bindok="handleRangeOk"
#endif
/>
Page({
data: {
defaultDateRange: [
new Date('2022/03/21').getTime(),
new Date('2022/05/20').getTime(),
],
},
handlePickerRangeChange(type, date, dateStr, e) {
console.log('onPickerRangeChange', type, date, dateStr, e);
},
handleTriggerPicker(visible, e) {
console.log('onVisibleChange', visible, e);
},
handleRangeOk(date, format, e) {
console.log('onRangeOk', date, format, e);
},
});
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
animationType | 动画类型,可选 transform position ,默认使用 transform 动画性能更好。由于小程序基础库 bug,弹窗内 picker-view 阴影样式在 iOS 下可能存在样式问题,可暂切换为 position 解决。 |
string | transform |
className | 类名 | string | - |
defaultValue | 默认选中的时间 | Date | - |
defaultPickerValue | 设置用户选择日期时默认的时间 | Date | - |
disabled | 是否禁用 | boolean | false |
readonly | 是否只读 | boolean | false |
cancelText | 取消文案 | string | "取消" |
content | 自定义内容插槽 | slot | - |
format | 时间格式化显示,格式同 dayjs | string | 'YYYY/MM/DD' |
indicatorStyle | 选中框样式 | string | - |
indicatorClassName | 选中框的类名 | string | - |
maskClassName | 蒙层的类名 | string | - |
maskClosable | 点击蒙层是否可以关闭 | boolean | true |
maskStyle | 蒙层样式 | string | - |
max | 最大值 | Date | 十年后 |
min | 最小值 | Date | 十年前 |
okText | 确认按钮文案 | string | "确定" |
placeholder | 提示文案 | string | "请选择" |
popClassName | 弹出框类名 | string | - |
popStyle | 弹出框样式 | string | - |
precision | 选择精度,可选 year month day hour minute second |
string | day |
content-header | 弹窗内容顶部 | slot | - |
style | 样式 | string | - |
prefix | 前缀 | slot | - |
style | 样式 | string | - |
suffix | 后缀 | slot | - |
title | 弹出框标题 | string | slot | - |
value | 选中的时间 | Date | - |
visible | 是否显示 | boolean | false |
defaultVisible | 默认是否显示 | boolean | false |
onFormat | 选中值的文本显示格式 | (date: Date, dateStr: string) => string | - |
onFormatLabel | 自定义每列展示的内容,默认添加年、月、日、时、分、秒单位 | (type: year | month | day | hour | minute | second , value: number) => string |
- |
#if ALIPAY onOk | 点击确定按钮,触发回调 | (date: Date, dateStr: string, event: Event) => void | - |
#if ALIPAY onCancel | 点击取消按钮/蒙层,触发回调 | (event: Event) => void | - |
#if ALIPAY onPickerChange | 选中项发生变化,触发回调 | (date: Date, dateStr: string, event: Event) => void | - |
#if ALIPAY onVisibleChange | 弹出框显示/隐藏状态变化触发 | (visible: boolean, event: Event) => void | - |
#if WECHAT bindok | 点击确定按钮,触发回调 | (date: Date, dateStr: string, event: Event) => void | - |
#if WECHAT bindcancel | 点击取消按钮/蒙层,触发回调 | (event: Event) => void | - |
#if WECHAT bindpickerchange | 选中项发生变化,触发回调 | (date: Date, dateStr: string, event: Event) => void | - |
#if WECHAT bindvisiblechange | 弹出框显示/隐藏状态变化触发 | (visible: boolean, event: Event) => void | - |
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
animationType | 动画类型,可选 transform position ,默认使用 transform 动画性能更好。由于小程序基础库 bug,弹窗内 picker-view 阴影样式在 iOS 下可能存在样式问题,可暂切换为 position 解决。 |
string | transform |
className | 类名 | string | - |
defaultValue | 默认选中的时间范围 | [Date, Date] | - |
disabled | 是否禁用 | boolean | false |
readonly | 是否只读 | boolean | false |
cancelText | 取消文案 | string | "取消" |
content | 自定义内容插槽 | slot | - |
endPlaceholder | 结束时间提示文案 | string | "未选择" |
format | 时间格式化显示,格式同 dayjs | string | 'YYYY/MM/DD' |
indicatorStyle | 选中框样式 | string | - |
indicatorClassName | 选中框的类名 | string | - |
maskClassName | 蒙层的类名 | string | - |
maskClosable | 点击蒙层是否可以关闭 | boolean | true |
maskStyle | 蒙层样式 | string | - |
max | 最大值 | Date | 十年后 |
min | 最小值 | Date | 十年前 |
okText | 确认按钮文案 | string | "确定" |
placeholder | 提示文案 | string | "请选择" |
popClassName | 弹出框类名 | string | - |
popStyle | 弹出框样式 | string | - |
precision | 选择精度,可选 year month day hour minute |
string | day |
splitCharacter | 显示连接符 | string | - |
startPlaceholder | 开始时间提示文案 | string | "未选择" |
content-header | 弹窗内容顶部 | slot | - |
style | 样式 | string | - |
prefix | 前缀 | slot | - |
style | 样式 | string | - |
suffix | 后缀 | slot | - |
title | 弹出框标题 | string | slot | - |
value | 选中的时间范围 | [Date, Date] | - |
visible | 是否显示 | boolean | false |
defaultVisible | 默认是否显示 | boolean | false |
onFormat | 选中值的文本显示格式 | (date: [Date, Date], dateStr: [string, string]) => string | - |
onFormatLabel | 自定义每列展示的内容,默认添加年、月、日、时、分、秒单位 | (type: year | month | day | hour | minute , value: number) => string |
- |
#if ALIPAY onOk | 点击确定按钮,触发回调 | (date: [Date, Date], dateStr: [string, string], event: Event) => void | - |
#if ALIPAY onCancel | 点击取消按钮/蒙层,触发回调 | (event: Event) => void | - |
#if ALIPAY onPickerChange | 选中项发生变化,触发回调 | (type: start | end , date: Date, dateStr: string, event: Event) => void |
- |
#if ALIPAY onVisibleChange | 弹出框显示/隐藏状态变化触发 | (visible: boolean, event: Event) => void | - |
#if WECHAT bindok | 点击确定按钮,触发回调 | (date: [Date, Date], dateStr: [string, string], event: Event) => void | - |
#if WECHAT bindcancel | 点击取消按钮/蒙层,触发回调 | (event: Event) => void | - |
#if WECHAT bindpickerchange | 选中项发生变化,触发回调 | (type: start | end , date: Date, dateStr: string, event: Event) => void |
- |
#if WECHAT bindvisiblechange | 弹出框显示/隐藏状态变化触发 | (visible: boolean, event: Event) => void | - |
DatePicker 组件返回的时间格式为 Date
类型,如果需要转换为 YYYY-MM-DD
格式,可以使用 dayjs 进行转换。
<date-picker
#if ALIPAY
onOk="handleOk"
#endif
#if WECHAT
bindok="handleOk"
#endif
/>
Page({
handleOk(date) {
const dateStr = dayjs(date).format('YYYY-MM-DD');
console.log(dateStr);
},
});
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。
变量名 | 默认值 | 深色模式默认值 | 备注 |
---|---|---|---|
--range-picker-shadow-color | #000000 |
#000000 |
范围选择器阴影颜色 |
--range-picker-item-color | #333333 |
#c5cad1 |
范围选择器项颜色 |
--range-picker-active-color | #1677ff |
#3086ff |
范围选择器活动项颜色 |
--range-picker-placeholder-color | #cccccc |
#474747 |
范围选择器占位符颜色 |
--range-picker-shadow-color-faded | rgba(0, 0, 0, 0.9) |
rgba(0, 0, 0, 0.9) |
范围选择器阴影颜色(褪色) |