|

使用Vue开发UI组件:Select选择框组件

上一篇文章介绍了 input 组件的开发,本文将简要介绍选择框 select 组件的开发。

开发

首先定义模板文件。

<template>
  <div class="sselect" :class="classes">
    <div class="slct-cnt" tabindex="1"
        placeholder="sadfsda"
        @click="toggleOptionList"
        @blur="onBlur">
      <div class="slct-prefix-icon" v-if="icon !== null">
        <sicon :name="icon"></sicon>
      </div>
      <div class="slct-selected" v-if="selectedArray.length > 0">
        <span class="slct-list" v-for="(item, index) in selectedArray" :key="index">{{item.label}}</span>
      </div>
      <div class="slct-placeholder" v-else>{{placeholder}}</div>
      <div class="slct-down-icon">
        <sicon name="angle-down"></sicon>
      </div>
    </div>
    <transition name="fade">
      <ul class="slct-from" v-if="showOptions">
        <li v-for="(item, index) in options" :key="index" @click="itemSelected(item, $event)">
          <div class="slct-op-key">{{item.label}}</div>
        </li>
      </ul>
    </transition>
  </div>
</template>

同样的,select 组件的样式文件也将通过 classes 计算所得。

computed: {
    classes() {
        return [
            `slct-{this.color}`,
            `slct-{this.size}`,
            {'slct-is-disabled': this.disabled},
            {'slct-is-bold': this.bold},
            {'slct-is-sharp': this.sharp},
            {'slct-is-block': this.block},
        ];
    }
}

select 组件需要包含一个选项表,这部分被定义在 selectedArray 中,然后由 transition 组件提供过度动画。

select 组件必备的几个方法如下:

// ...
methods: {
    toggleOptionList(e) {
          if (this.disabled) return;
          this.showOptions = !this.showOptions
    },
    onBlur(e) {
        this.showOptions = false;
    },
    itemSelected(value, e) {
        if (!this.multiple) {
            this.selectedArray = [value];
            this.showOptions = false;
        }
        this.$emit("selectDone", this.selectedArray);
    }
}
// ...

使用

直接在外部组件中引入即可。

<sselect :options="selectOptions" color="dark" placeholder="请选择" @selectDone="onSelectDone"></sselect>

然后来看主要的属性。

属性:color

color 属性用来设置选择框的外在样式。

属性值 释义 引用
default default色 </sselect color="default"/>
primary primary色 </sselect color="primary"/>
warning warning色 </sselect color="warning"/>
info info色 </sselect color="info"/>
success success色 </sselect color="success"/>
danger danger色 </sselect color="danger"/>

属性:size

size 属性用来设置选择框的尺寸。

属性值 释义 引用
middle 中等大小,默认 </sselect size="middle"/>
small 小尺寸 </sselect size="small"/>
large 大尺寸 </sselect size="large"/>

属性:placeholder

placeholder 设置选择框待选时的提示文本。

属性:icon

icon 用来设置选择框的前置图标,与 input 类似。

属性:disabled

disabled 用来设置选择框是否可用,如果为 true 表示禁用,此时选择框不可点击,不可选择。

属性:sharp

sharp 属性用来设置选择框是否禁用圆角,默认为 false。

属性:block

block 属性用来设置选择框是否作为块元素整行显示。

属性:bold

bold 属性用来设置选择框是否加粗外边框。

属性:multiple

multiple 属性用来设置选择框是否支持多选。

属性:options

options 属性用来设置选择框的待选列表,支持一个数组,或者一个键值对数组。

data () {
    return {
        // 直接传一个数组
        selectOptions: ['Apple', 'Orange', 'Banana', 'Pitch'],
        // 或者传一个键值对数组
        selectOptions: [
            {
              label: "Apple",
              value: "Apple"
            },
            {
              label: "Orange",
              value: "Orange",
            },
            {
              label: "Banana",
              value: "Banana"
            },
            {
              label: "Pitch",
              value: "Pitch"
            }
        ]
    }
}

事件:selectDone

当选择框完成选择时,触发 selectDone 事件。

<sselect :options="selectOptions" color="primary" bold placeholder="请选择" @selectDone="onSelectDone"></sselect>

<script>
    // ...
    methods: {
        // ...
        onSelectDone(arr) {
            console.log(arr);
        }
    }
</script>

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注