## CascadePicker组件
`CascadePicker`组件是级联选择器,用于实现多列选择之间的级联变化。比如,在选择省市区时,当省切换到了江苏省,城市列应该变成江苏省的各个城市,同理,如果城市切换到苏州市,区列的选项也应变成苏州市的各个区,这就级联的意义。
### 示例
- 基本用法
相比普通选择器,级联选择器需要传入的数据结构是不一样的。普通选择器的数据结构是一个二维数组,每一列对应一个固定的数组,而级联选择器,则需要传入的是一个树形结构,第一列数组的每个选项的children属性,对应着切换到该选项时后续列的数据,从而实现对后续列的改变。如下所示:
```html
Cascade Picker
```
```js
const cascadeData = [
{
value: 'Fruit',
text: 'Fruit',
children: [
{
value: 'Apple',
text: 'Apple',
children: [{ value: 1, text: 'One' }, { value: 2, text: 'Two' }]
},
{
value: 'Orange',
text: 'Orange',
children: [{ value: 3, text: 'Three'}, { value: 4, text: 'Four' }]
}
]
},
{
value: 'Drink',
text: 'Drink',
children: [
{
value: 'Coffee',
text: 'Coffee',
children: [{ value: 1, text: 'One' }, { value: 2, text: 'Two' }]
},
{
value: 'Tea',
text: 'Tea',
children: [{ value: 1, text: 'One' }, { value: 3, text: 'Three'}]
}
]
}
]
export default {
mounted () {
this.cascadePicker = this.$createCascadePicker({
title: 'Cascade Picker',
data: cascadeData,
selectedIndex: [1, 0, 0],
onSelect: (selectedVal, selectedIndex, selectedText) => {
console.log('select', selectedVal, selectedIndex, selectedText)
},
onCancel: () => {
console.log('cancel')
}
})
},
methods: {
showCascadePicker() {
this.cascadePicker.show()
}
}
}
```
当第一列选中`Fruit`时,第二列的选项是`Apple`、`Orange`。以此类推,当第二列选中`Orange`时,第三列的选项是`Three`、`Four`。
- 省市区选择器
对于省市区选择器,只需要构造出级联选择器的数据结构传入就可以了。
```html
City Picker
```
```js
import { provinceList, cityList, areaList } from 'example/data/area'
const cityData = provinceList
cityData.forEach(province => {
province.children = cityList[province.value]
province.children.forEach(city => {
city.children = areaList[city.value]
})
})
export default {
mounted () {
this.cityPicker = this.$createCascadePicker({
title: 'City Picker',
data: cityData,
onSelect: (selectedVal, selectedIndex, selectedText) => {
console.log('select', selectedVal, selectedIndex, selectedText)
},
onCancel: () => {
console.log('cancel')
}
})
},
methods: {
showCityPicker() {
this.cityPicker.show()
}
}
}
```
- 日期选择器
日期选择器的原理也是一样,就是构造出级联选择器的数据结构。而且我们还在示例中提供一个[日期选择器组件](https://github.com/didi/cube-ui/blob/dev/example/components/date-picker.vue),可以传入起始日期和结束日期,帮你生成相应的级联树形数据结构。用法如下:
```html
Date Picker
```
```js
import DatePicker from 'example/components/date-picker.vue'
createAPI(Vue, DatePicker, ['select', 'cancel'], false)
export default {
mounted () {
this.datePicker = this.$createDatePicker({
min: [2008, 8, 8],
max: [2020, 10, 20],
onSelect: (selectedVal, selectedIndex, selectedText) => {
console.log('select', selectedVal, selectedIndex, selectedText)
},
onCancel: () => {
console.log('cancel')
}
})
},
methods: {
showDatePicker() {
this.datePicker.show()
}
}
}
```
- 实例方法 `setData`
`setData`方法,用于重置`CascadePicker`实例的数据和选中的索引。
```html
SetData Picker
```
```js
export default {
mounted () {
this.setDataPicker = this.$createCascadePicker({
title: 'Set Data',
onSelect: (selectedVal, selectedIndex, selectedText) => {
console.log('select', selectedVal, selectedIndex, selectedText)
},
onCancel: () => {
console.log('cancel')
}
})
},
methods: {
showSetDataPicker() {
// setData when picker is invisible
this.setDataPicker.setData(cascadeData)
this.setDataPicker.show()
setTimeout(() => {
// setData when picker is visible
this.setDataPicker.setData(cityData, [1, 1, 0])
}, 1000)
}
}
}
```
值得注意的一点是,虽然不管选择器显示前后,都可以`setData`,但是为了体验,在显示后`setData`,所传入的数据结构,必须与之前的列数相同,也就是说如果之前是三列选择器,显示时`setData`还得是三列。
### Props 配置
| 参数 | 说明 | 类型 | 默认值 | 示例 |
| - | - | - | - | - |
| title | 标题 | String | '' | - |
| data | 级联选择器的树形数据,用于初始化选项 | Array | [] | - |
| selectedIndex | 被选中的索引值,拉起选择器后显示这个索引值对应的内容 | Array | [] | [1] |
* `data`子配置项
| 参数 | 说明 | 类型 | 默认值 | 示例 |
| - | - | - | - | - |
| text | 每个选项展示的文案 | String/Number | - | - |
| value | 每个选项的值 | String/Number/Boolean | - | - |
### 事件
| 事件名 | 说明 | 参数1 | 参数2 | 参数3 |
| - | - | - | - | - |
| select | 点击确认按钮触发此事件 | selectedVal: 当前选中项每一列的值,Array类型 | selectedIndex: 当前选中项每一列的索引,Array类型 | selectedText: 当前选中项每一列的文案,Array类型 |
| change | 滚轴滚动后触发此事件 | index: 当前滚动列次序,Number类型 | selectedIndex: 当前列选中项的索引,Number类型 |
| cancel | 点击取消按钮触发此事件 | - | - |
### 实例方法
| 方法名 | 说明 | 参数1 | 参数2 |
| - | - | - | - |
| setData | 重置数据和选中的索引 | 级联树形数据结构,Array类型 | 每列选中的索引,Array类型 |