feat(DatetimePicker): add filter prop (#1956)

This commit is contained in:
Jake 2019-09-05 16:18:29 +08:00 committed by neverland
parent dca7dfe98d
commit fea272200d
4 changed files with 68 additions and 10 deletions

View File

@ -15,10 +15,18 @@ Page({
formatter(type, value) { formatter(type, value) {
if (type === 'year') { if (type === 'year') {
return `${value}`; return `${value}`;
} else if (type === 'month') { }
if (type === 'month') {
return `${value}`; return `${value}`;
} }
return value; return value;
},
filter(type, options) {
if (type === 'minute') {
return options.filter(option => option % 5 === 0);
}
return options;
} }
}, },

View File

@ -41,4 +41,12 @@
/> />
</demo-block> </demo-block>
<demo-block title="选项过滤器">
<van-datetime-picker
type="time"
value="{{ currentDate4 }}"
filter="{{ filter }}"
/>
</demo-block>
<van-toast id="van-toast" /> <van-toast id="van-toast" />

View File

@ -144,6 +144,33 @@ Page({
}); });
``` ```
### 选项过滤器
通过传入 `filter` 函数,可以对选项数组进行过滤,实现自定义时间间隔
```html
<van-datetime-picker
type="time"
value="{{ currentDate }}"
filter="{{ filter }}"
/>
```
```js
Page({
data: {
currentDate: '12:00',
filter(type, options) {
if (type === 'minute') {
return options.filter(option => option % 5 === 0)
}
return options;
}
}
});
```
### Props ### Props
| 参数 | 说明 | 类型 | 默认值 | | 参数 | 说明 | 类型 | 默认值 |
@ -156,6 +183,7 @@ Page({
| max-hour | 可选的最大小时,针对 time 类型 | *number* | `23` | | max-hour | 可选的最大小时,针对 time 类型 | *number* | `23` |
| min-minute | 可选的最小分钟,针对 time 类型 | *number* | `0` | | min-minute | 可选的最小分钟,针对 time 类型 | *number* | `0` |
| max-minute | 可选的最大分钟,针对 time 类型 | *number* | `59` | | max-minute | 可选的最大分钟,针对 time 类型 | *number* | `59` |
| filter | 选项过滤函数 | *(type, values) => values* | - |
| formatter | 选项格式化函数 | *(type, value) => value* | - | | formatter | 选项格式化函数 | *(type, value) => value* | - |
| title | 顶部栏标题 | *string* | `''` | | title | 顶部栏标题 | *string* | `''` |
| show-toolbar | 是否显示顶部栏 | *boolean* | `false` | | show-toolbar | 是否显示顶部栏 | *boolean* | `false` |

View File

@ -49,6 +49,7 @@ VantComponent({
type: Function, type: Function,
value: defaultFormatter value: defaultFormatter
}, },
filter: Function,
value: null, value: null,
type: { type: {
type: String, type: String,
@ -129,19 +130,32 @@ VantComponent({
updateColumns() { updateColumns() {
const { formatter = defaultFormatter } = this.data; const { formatter = defaultFormatter } = this.data;
const results = this.getRanges().map(({ type, range }) => { const results = this.getOriginColumns().map(column => ({
const values = times(range[1] - range[0] + 1, index => { values: column.values.map(value => formatter(column.type, value))
let value = range[0] + index; }));
value = type === 'year' ? `${value}` : padZero(value);
return formatter(type, value);
});
return { values };
});
return this.set({ columns: results }); return this.set({ columns: results });
}, },
getOriginColumns() {
const { filter } = this.data;
const results = this.getRanges().map(({ type, range }) => {
let values = times(range[1] - range[0] + 1, index => {
let value = range[0] + index;
value = type === 'year' ? `${value}` : padZero(value);
return value;
});
if (filter) {
values = filter(type, values);
}
return { type, values };
});
return results;
},
getRanges() { getRanges() {
const { data } = this; const { data } = this;
if (data.type === 'time') { if (data.type === 'time') {