SegmentPicker 组件

1.7.0 新增

段选择器,用于实现多段的选择,比如选择时间段:2010年9月1日 - 2014年6月30日。

注: 由于此组件基于 create-api 实现,所以在使用之前,请确保自己了解过 create-api

示例

  • 基本用法

通过 data 属性定义每个节点选择器的类型和属性,is 代表该选择器是用哪种 Picker 组件,既可以是 Cube UI 的 Picker 类组件,也可以是你自己定义的 Picker 组件。比如下面是我们用两个 DatePicker 组件来做时间段选择。

  1. <cube-button @click="showDateSegmentPicker">StartDate - EndDate</cube-button>
  1. const dateSegmentData = [
  2. {
  3. is: 'cube-date-picker',
  4. title: '入学时间',
  5. min: new Date(2000, 0, 1),
  6. max: new Date(2030, 11, 31)
  7. },
  8. {
  9. is: 'cube-date-picker',
  10. title: '毕业时间',
  11. min: new Date(2000, 0, 1),
  12. max: new Date(2030, 11, 31)
  13. }
  14. ]
  15.  
  16. export default {
  17. mounted () {
  18. this.dateSegmentPicker = this.- createSegmentPicker({
  19. data: dateSegmentData,
  20. onSelect: (selectedDates, selectedVals, selectedTexts) => {
  21. this.- createDialog({
  22. type: 'warn',
  23. content: `Selected Items:
    - 入学时间: - {selectedTexts[0].join('')}
    - 毕业时间: - {selectedTexts[1].join('')}`,
  24. icon: 'cubeic-alert'
  25. }).show()
  26. },
  27. onNext: (i, selectedDate, selectedValue, selectedText) => {
  28. dateSegmentData[1].min = selectedDate
  29. if (i === 0) {
  30. this.dateSegmentPicker.- updateProps({
  31. data: dateSegmentData
  32. })
  33. }
  34. }
  35. })
  36. },
  37. methods: {
  38. showDateSegmentPicker() {
  39. this.dateSegmentPicker.show()
  40. }
  41. }
  42. }

并且为了实现两个选择器之间的联动,我们可以在 next 下一步的事件处理函数中,根据第一个的选择,更新第二个选择器,比如这里是,将结束时间的最小值 = 所选的开始时间。

  • 快递 - 寄件地址 - 收件地址
    1. <cube-button @click="showCitySegmentPicker">Express - From - To</cube-button>
  1. import { provinceList, cityList, areaList } from 'example/data/area'
  2.  
  3. const cityData = provinceList
  4. cityData.forEach(province => {
  5. province.children = cityList[province.value]
  6. province.children.forEach(city => {
  7. city.children = areaList[city.value]
  8. })
  9. })
  10.  
  11. export default {
  12. mounted () {
  13. this.citySegmentPicker = this.- createSegmentPicker({
  14. data: [{
  15. title: '选择快递',
  16. data: [expressData],
  17. selectedIndex: [1]
  18. }, {
  19. is: 'cube-cascade-picker',
  20. title: '寄件地址',
  21. data: cityData,
  22. selectedIndex: [0, 0, 0],
  23. cancelTxt: '返回'
  24. }, {
  25. is: 'cube-cascade-picker',
  26. title: '收件地址',
  27. data: cityData,
  28. selectedIndex: [0, 0, 0]
  29. }],
  30. cancelTxt: 'Cancel',
  31. confirmTxt: 'Confirm',
  32. nextTxt: 'Next',
  33. prevTxt: 'Prev',
  34. onSelect: (selectedVals, selectedIndexs, selectedTexts) => {
  35. this.- createDialog({
  36. type: 'warn',
  37. content: `Selected Items:
    - 所选快递: - {selectedTexts[0].join('')}
    - 寄件地址: - {selectedTexts[1].join('')}
    - 收件地址: - {selectedTexts[2].join('')}`,
  38. icon: 'cubeic-alert'
  39. }).show()
  40. }
  41. })
  42. },
  43. methods: {
  44. showCitySegmentPicker() {
  45. this.citySegmentPicker.show()
  46. }
  47. }
  48. }

Props 配置

参数 说明 类型 默认值 示例
data 定义各个选择器的组件名和属性 Array [] -
nextTxt 下一步按钮文案 String '下一步' -
prevTxt 上一步按钮文案 String '下一步' -
title 标题 String '' -
subtitle1.8.1 副标题 String '' -
cancelTxt 取消按钮文案 String '取消' -
confirmTxt 确定按钮文案 String '确定' -
swipeTime1.8.1 快速滑动选择器滚轮时,惯性滚动动画的时长,单位:ms Number 2500 -
visible1.8.1 显示状态,是否可见。v-model绑定值 Boolean true/false false
maskClosable1.9.6 点击蒙层是否隐藏 Boolean true/false true
  • data 子配置项
参数 说明 类型 默认值 示例
is 该节点选择器的组件名 String cube-picker cube-date-picker
其它 该节点选择器的属性 - - -

事件

事件名 说明 参数1 参数2 参数3
select 点击确认按钮触发此事件 各个选择器的 select 事件的参数1,Array 类型 各个选择器的 select 事件的参数2,Array 类型 各个选择器的 select 事件的参数3,Array 类型
cancel 点击取消按钮触发此事件 - - -
next 点击下一步按钮触发此事件 当前 picker 的索引,Number类型 其余参数为,当前 picker select 时间的参数 ···
prev 点击上一步按钮触发此事件 当前 picker 的索引,Number类型 - -
change 滚轴滚动后触发此事件 pickerIndex: 当前滚动 picker 的索引,Number类型 index: 当前滚动列索引,Number类型 selectedIndex: 当前列选中项的索引,Number类型

实例方法

方法名 说明
show 显示
hide 隐藏

原文:

https://didi.github.io/cube-ui/#/zh-CN/docs/segment-picker