Vue下拉选择框Select组件使用详解(一)

 更新时间:2022年03月03日 08:23:04   作者:theMuseCatcher  
这篇文章主要为大家详细介绍了Vue下拉选择框Select组件的使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Vue下拉选择框Select组件的使用方法,供大家参考,具体内容如下

效果图如下:

 展开图如下:

①创建组件Select.vue:预设两种主题色,亦可视情况进行自定义修改样式:

<template>
  <div class="m-select-wrap">
    <input
      :class="['u-select-input f16', color === 'blue' ? '' : 'white-color']"
      type="text"
      readonly
      @click="openSelect"
      @blur="onBlur"
      v-model="selectName" />
    <div :class="['triangle-down', { 'rotate': rotate }]" @click="openSelect"></div>
    <div :class="['m-options-panel f16', showOptions ? 'show': 'hidden']" :style="`height: ${selectData.length * 40}px;`">
      <p class="u-option" @mousedown="getValue(item.name, item.value, index)" v-for="(item, index) in selectData" :key="index">
        {{ item.name }}
      </p>
    </div>
  </div>
</template>
<script>
export default {
  name: 'Select',
  props: {
    selectData: {
      type: Array,
      default: () => {
        return []
      }
    },
    // eslint-disable-next-line vue/require-prop-types
    selValue: { // 将该prop值作为selV的初始值
      default: undefined
    },
    color: {
      type: String,
      default: () => {
        return 'blue'
      }
    }
  },
  computed: {
    selectName () {
      let selName
      this.selectData.forEach(item => {
        if (item.value === this.selectValue) {
          selName = item.name
        }
      })
      return selName
    },
    selectValue: {
      get () {
        return this.selV
      },
      set (newVal) {
        this.selV = newVal
      }
    }
  },
  data () {
    return {
      selV: this.selValue,
      rotate: false,
      showOptions: false
    }
  },
  methods: {
    openSelect () {
      this.showOptions = !this.showOptions
      this.rotate = !this.rotate
    },
    getValue (name, value, index) {
      this.selectValue = value
      this.$emit('getValue', name, value, index)
    },
    onBlur () {
      this.showOptions = false
      this.rotate = false
    }
  }
}
</script>
<style lang="less" scoped>
.m-select-wrap {
  width: 135px;
  height: 40px;
  line-height: 40px;
  position: relative;
  .u-select-input {
    width: 105px;
    background: #3A79EE;
    color: #FFFFFF;
    box-shadow: 0px 10px 20px 0px rgba(144, 119, 222, 0.2);
    border-radius: 20px;
    height: 40px;
    line-height: 40px;
    padding: 0 15px;
    cursor: pointer;
    border: none;
  }
  .white-color {
    background: #FFFFFF;
    color: #3A79EE;
  }
  .triangle-down { // 下三角样式
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 10px solid #333;
    position: absolute;
    top: 18px;
    right: 15px;
    transition: transform 0.3s ease-in-out;
  }
  .rotate {
    transform: rotate(180deg);
  }
  .m-options-panel {
    position: absolute;
    background: #FFFFFF;
    border-radius: 8px;
    width: 133px;
    border: 1px solid #E3E3E3;
    top: 46px;
    left: 0;
    color: #706F94;
    .u-option {
      padding: 0 15px;
      cursor: pointer;
    }
    .u-option:hover {
      color: #3A79EE;
      background: #EEF1FA;
    }
  }
  .show {
    display: block;
  }
  .hidden {
    display: none;
  }
}
</style>

②在要使用的页面引入:

<Select
    :selectData="selectData"
    :selValue="selValue"
    color="white"
    @getValue="getValue" />
import Select from '@/components/Select'
components: {
    Select
}
data () {
    return {
        selectData: [
        {
            name: '十一五',
            value: 11
        },
        {
            name: '十二五',
            value: 12
        },
        {
            name: '十三五',
            value: 13
        },
        
        ],
        selValue: ''
     }
}
created () {
    // 初始化下拉框
    this.selValue = this.selectData[0].value
}
methods: {
    getValue (name, value, index) {
          console.log('item:', name, value, index)
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法

    这篇文章主要介绍了详解Vue 单文件组件的三种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Vue 2.0学习笔记之使用$refs访问Vue中的DOM

    Vue 2.0学习笔记之使用$refs访问Vue中的DOM

    这篇文章主要介绍了Vue 2.0学习笔记之使用$refs访问Vue中的DOM,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • vue定义私有过滤器和基本使用

    vue定义私有过滤器和基本使用

    这篇文章主要介绍的是 vue定义私有过滤器和基本使用,下面文章围绕vue定义私有过滤器的相关资料展开内容,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • vue3中如何获取proxy包裹的数据

    vue3中如何获取proxy包裹的数据

    这篇文章主要介绍了vue3中如何获取proxy包裹的数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue 实现websocket发送消息并实时接收消息

    vue 实现websocket发送消息并实时接收消息

    这篇文章主要介绍了vue 实现websocket发送消息并实时接收消息,项目结合vue脚手架和websocket来搭建,本文给大家分享实例代码,需要的朋友可以参考下
    2019-12-12
  • vue中v-text / v-html使用实例代码详解

    vue中v-text / v-html使用实例代码详解

    这篇文章主要介绍了vue中v-text / v-html使用实例代码详解,非常不错,代码简单易懂,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • 浅谈vue项目如何打包扔向服务器

    浅谈vue项目如何打包扔向服务器

    本篇文章主要介绍了浅谈vue项目如何打包扔向服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • vue动态绑定图标的完整步骤

    vue动态绑定图标的完整步骤

    动态绑定是我们日常开发中经常遇到的一个需求,下面这篇文章主要给大家介绍了关于vue动态绑定图标的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-05-05
  • 如何使用Vue的思想封装一个Storage

    如何使用Vue的思想封装一个Storage

    作为Web Storage API的接口,Storage 提供了访问特定域名下的会话存储或本地存储的功能,例如可以添加、修改或删除存储的数据项,这篇文章主要给大家介绍了关于如何使用Vue的思想封装一个Storage的相关资料,需要的朋友可以参考下
    2021-08-08
  • 实现一个Vue自定义指令懒加载的方法示例

    实现一个Vue自定义指令懒加载的方法示例

    这篇文章主要介绍了实现一个Vue自定义指令懒加载的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论