Drawer

1.7.0 新增

抽屉,主要用来需要大范围层级进行选择的场景,一般情况下应该是满屏状态。

注: 组件依赖父容器相对定位或者绝对定位,因为 Drawer 是绝对定位的。

示例

  • 默认配置使用
    1. <cube-button @click="showDrawer">Show Drawer</cube-button>
    2. <cube-drawer ref="drawer" title="请选择" :data="data" :selected-index="selectedIndex" @change="changeHandler" @select="selectHandler" @cancel="cancelHandler"></cube-drawer>
    1. import { provinceList, cityList, areaList } from '../../data/area'
    2. export default {
    3. data() {
    4. return {
    5. selectedIndex: [],
    6. data: [
    7. provinceList,
    8. [],
    9. []
    10. ]
    11. }
    12. },
    13. methods: {
    14. showDrawer() {
    15. this.- refs.drawer.show()
    16. },
    17. changeHandler(index, item, selectedVal, selectedIndex, selectedText) {
    18. // fake request
    19. setTimeout(() => {
    20. let data
    21. if (index === 0) {
    22. // procince change, get city data
    23. data = cityList[item.value]
    24. } else {
    25. // city change, get area data
    26. data = areaList[item.value]
    27. }
    28. // refill panel(index + 1) data
    29. this.- refs.drawer.refill(index + 1, data)
    30. }, 200)
    31. },
    32. selectHandler(selectedVal, selectedIndex, selectedText) {
    33. this.- createDialog({
    34. type: 'warn',
    35. content: `Selected Item:
      - value: - {selectedVal.join(', ')}
      - index: - {selectedIndex.join(', ')}
      - text: - {selectedText.join(' ')}`,
    36. icon: 'cubeic-alert'
    37. }).show()
    38. },
    39. cancelHandler() {
    40. console.log('cancel')
    41. }
    42. }
    43. }

title 就是标题,可选;data 数据源,二维数组,长度决定了抽屉的 Panel 数,初始长度一定要确定;selected-index 则是初始选择的索引值;change、select、cancel 则是对应的三个事件:选择发生改变(选中是非最后一个 Panel 中的项的时候触发)、选中了某个值(选择了最后一个 Panel 中的项触发)、取消(点击左侧空白蒙层触发)。

你可以在 change 中通过 Drawer 的 fill 方法更新下一个 Panel 的数据,可以是同步更新也可以是异步更新。

  • 自定义使用

你可以通过插槽来自定义结构。

  1. <cube-drawer ref="drawer" :data="data" :selected-index="selectedIndex" @change="changeHandler" @select="selectHandler" @cancel="cancelHandler">
  2. <span slot="title">{{province.text}}</span>
  3. <cube-drawer-panel v-for="(panel, index) in data" :key="index" :index="index" :data="panel">
  4. <cube-drawer-item v-for="(item, i) in panel" :item="item" :key="i" :index="i">
  5. <i class="cubeic-round-border"></i>
  6. <span>{{item.text}}</span>
  7. </cube-drawer-item>
  8. </cube-drawer-panel>
  9. </cube-drawer>
  1. import { provinceList, cityList, areaList } from '../../data/area'
  2. export default {
  3. data() {
  4. return {
  5. province: {},
  6. selectedIndex: [],
  7. data: [
  8. [],
  9. []
  10. ]
  11. }
  12. },
  13. methods: {
  14. showDrawer() {
  15. // get radom province
  16. const randomIndex = Math.round(Math.random() * provinceList.length)
  17. const randomProvince = provinceList[randomIndex]
  18. this.province = randomProvince
  19. this.- refs.drawer.refill(0, cityList[randomProvince.value])
  20. this.- refs.drawer.show()
  21. },
  22. changeHandler(index, item, selectedVal, selectedIndex, selectedText) {
  23. setTimeout(() => {
  24. // city change, get area data
  25. const data = areaList[item.value]
  26. this.- refs.drawer.refill(index + 1, data)
  27. }, 200)
  28. },
  29. selectHandler(selectedVal, selectedIndex, selectedText) {
  30. this.- createDialog({
  31. type: 'warn',
  32. content: `Selected Item:
    - value: - {selectedVal.join(', ')}
    - index: - {selectedIndex.join(', ')}
    - text: - {selectedText.join(' ')}`,
  33. icon: 'cubeic-alert'
  34. }).show()
  35. },
  36. cancelHandler() {
  37. console.log('cancel')
  38. }
  39. }
  40. }

可以在 cube-drawer 组件中使用 cube-drawer-panel 以及 cube-drawer-item 组件来达到某些情况下的自定义目的。

Props 配置

CubeDrawer

参数 说明 类型 可选值 默认值
title 标题 String - ''
data 数据源 Array - []
selectedIndex 初始选择索引 Array - []
visible1.8.1 显示状态,是否可见。v-model绑定值 Boolean true/false false
  • data 子配置项
    是一个数组,数组中每一项仍然为数组,结构类似于:

    1. [
      [
      {
      text: &#39;text&#39;,
    2. value: &#39;value&#39;
    3. },

      ],
      [
      'text',
      'text2',

      ]
      ]

    里层数组的每一项可以是对象(包含 text 和 value),也可以是纯字符串。

CubeDrawerPanel

参数 说明 类型 可选值 默认值
data 数据源 Array - []
index 该数据源在 CubeDrawer 的 data 中的索引值 Number - -1

CubeDrawerItem

参数 说明 类型 可选值 默认值
data 数据项 String/Object - ''
index 该数据项在 CubeDrawerPanel 的 data 中的索引值 Number - -1

事件

事件名 说明 参数1 参数2 参数3 参数4 参数5
change 选择发生改变(选中是非最后一个 Panel 中的项的时候触发) 发生改变的 Panel 的索引 发生改变的数据项 已选中的值集合 已选中的索引集合 已选中的文本集合
select 选择了最后一个 Panel 中的项触发 已选中的值集合 已选中的索引集合 已选中的文本集合 - -
cancel 点击左侧空白区域触发 - - - - -

实例方法

方法名 说明 参数1 参数2 参数3
refill 填充数据,改变某个 Panel 数据 要改变的 Panel 的索引 填充数据 默认选中项(可选,建议不填)
show 显示 - - -
hide 隐藏 - - -

原文:

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