Drawer

优质
小牛编辑
120浏览
2023-12-01

1.7.0 新增

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

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

示例

  • 默认配置使用

    <cube-button @click="showDrawer">Show Drawer</cube-button>
    <cube-drawer
      ref="drawer"
      title="请选择"
      :data="data"
      :selected-index="selectedIndex"
      @change="changeHandler"
      @select="selectHandler"
      @cancel="cancelHandler"></cube-drawer>
    
    import { provinceList, cityList, areaList } from '../../data/area'
    export default {
      data() {
        return {
          selectedIndex: [],
          data: [
            provinceList,
            [],
            []
          ]
        }
      },
      methods: {
        showDrawer() {
          this.$refs.drawer.show()
        },
        changeHandler(index, item, selectedVal, selectedIndex, selectedText) {
          // fake request
          setTimeout(() => {
            let data
            if (index === 0) {
              // procince change, get city data
              data = cityList[item.value]
            } else {
              // city change, get area data
              data = areaList[item.value]
            }
            // refill panel(index + 1) data
            this.$refs.drawer.refill(index + 1, data)
          }, 200)
        },
        selectHandler(selectedVal, selectedIndex, selectedText) {
          this.$createDialog({
            type: 'warn',
            content: `Selected Item: <br/> - value: ${selectedVal.join(', ')} <br/> - index: ${selectedIndex.join(', ')} <br/> - text: ${selectedText.join(' ')}`,
            icon: 'cubeic-alert'
          }).show()
        },
        cancelHandler() {
          console.log('cancel')
        }
      }
    }
    

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

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

  • 自定义使用

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

    <cube-drawer
      ref="drawer"
      :data="data"
      :selected-index="selectedIndex"
      @change="changeHandler"
      @select="selectHandler"
      @cancel="cancelHandler">
      <span slot="title">{{province.text}}</span>
      <cube-drawer-panel
        v-for="(panel, index) in data"
        :key="index"
        :index="index"
        :data="panel"
      >
        <cube-drawer-item v-for="(item, i) in panel" :item="item" :key="i" :index="i">
          <i class="cubeic-round-border"></i>
          <span>{{item.text}}</span>
        </cube-drawer-item>
      </cube-drawer-panel>
    </cube-drawer>
    
    import { provinceList, cityList, areaList } from '../../data/area'
    export default {
      data() {
        return {
          province: {},
          selectedIndex: [],
          data: [
            [],
            []
          ]
        }
      },
      methods: {
        showDrawer() {
          // get radom province
          const randomIndex = Math.round(Math.random() * provinceList.length)
          const randomProvince = provinceList[randomIndex]
          this.province = randomProvince
          this.$refs.drawer.refill(0, cityList[randomProvince.value])
          this.$refs.drawer.show()
        },
        changeHandler(index, item, selectedVal, selectedIndex, selectedText) {
          setTimeout(() => {
            // city change, get area data
            const data = areaList[item.value]
            this.$refs.drawer.refill(index + 1, data)
          }, 200)
        },
        selectHandler(selectedVal, selectedIndex, selectedText) {
          this.$createDialog({
            type: 'warn',
            content: `Selected Item: <br/> - value: ${selectedVal.join(', ')} <br/> - index: ${selectedIndex.join(', ')} <br/> - text: ${selectedText.join(' ')}`,
            icon: 'cubeic-alert'
          }).show()
        },
        cancelHandler() {
          console.log('cancel')
        }
      }
    }
    

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

Props 配置

CubeDrawer

参数说明类型可选值默认值
title标题String-''
data数据源Array-[]
selectedIndex初始选择索引Array-[]
visible1.8.1显示状态,是否可见。v-model绑定值Booleantrue/falsefalse
  • data 子配置项

    是一个数组,数组中每一项仍然为数组,结构类似于:

    [
      [
        {
          text: 'text',
          value: 'value'
        },
        ...
      ],
      [
        '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隐藏---

最后更新:

类似资料

  • 值的立方体只是值与自身相乘的三倍。 For example, 2的立方体是(2 * 2 * 2)= 8。 算法 (Algorithm) 该程序的算法简单易行 - START Step 1 → Take integer variable A Step 2 → Multiply A three times Step 3 → Display result as Cube STOP 伪

  • Cube 是一个开源的基于 MongoDB 的数据分析工具 Cube 的收集器接收事件并将这些事件保持在 MongoDB 中。你可通过 UDP、HTTP POST 或者 WebSockets 来发送事件。同时 Cube 内置支持接受来自 collectd 的事件。

  • 在前面的章节中,我们已经看到了如何绘制三角形并旋转它。 现在,在本章中,您可以了解如何使用3D立方体,如何旋转它,如何在其上附加图像。 同样,本章提供了绘制3D立方体并为其应用颜色并将图像附加到其上的示例。 下面给出了绘制三维立方体并为其应用颜色的程序。 import java.awt.DisplayMode; import javax.media.opengl.GL2; import javax

  • 找到给定数字是偶数或奇数,是一个经典的C程序。 我们将在C中学习使用条件语句if-else 。 算法 (Algorithm) 这个程序的算法很简单 - START Step 1 → Take integer variable A Step 2 → Assign value to the variable Step 3 → Perform A modulo 2 and check

  • cube-flowable 工作流引擎旨在打造一套零代码、领先、且快速实用的引擎工具,助力开发者在面对工作流开发任务时,除去学习工作流框架知识和API的学习成本且不去关心工作流是什么技术,无需了解学习,安装使用cube-flowable工作流引擎并应用落地。 此工作流引擎是零代码或低代码的工作流引擎,安装配置开箱即可使用,完全适用于中国国情的工作流引擎。主要特点包括: 在线拖拽可视化业务表单,并自

  • cube-ui 是由滴滴开源的基于 Vue.js 实现的移动端组件库。 功能特性 质量可靠 由滴滴内部组件库精简提炼而来,经历了业务一年多的考验,并且每个组件都有充分单元测试,为后续集成提供保障。 体验极致 以迅速响应、动画流畅、接近原生为目标,在交互体验方面追求极致。 标准规范 遵循统一的设计交互标准,高度还原设计效果;接口标准化,统一规范使用方式,开发更加简单高效。 扩展性强 支持按需引入和后