vue下拉选择框

 

 vue下拉选择框,自定义样式,

这是vue组件

<template>
  <div class="a">
    <span @click="handleDrop">{{active>-1?list[active].label:"请选择"}}</span>
    <div class="z">
      <ul v-show="visible" >
        <li v-for="(item,index) in list" :class="index===active?'active':''" @click="choose(item,index)" :key="index">
          {{item.label}}
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  name: "mySelect",
  props:['list'],
  data() {
    return {
      visible: false,
      active:-1
    }
  },
  methods: {
    choose(item,index){
      this.visible=false;
      if(this.active!==index){
        this.active=index;

        this.$emit("selected",{
          index:index,
          label:item.label,
          value:item.value
        })
      }

    },
    handleDrop(){
      this.visible=!this.visible
    },
    outClick(e){
      let dropRef= this.$el
      if(!dropRef.contains(e.target)&&this.visible){
        this.visible=false
      }
    }
  },

  mounted(){
    document.addEventListener('click',this.outClick)
  },
  destroyed(){
    document.removeEventListener('click',this.outClick)
  }

}
</script>

<style scoped>
.a{
  position: relative;
  width: 200px;
  display: inline-block;
  text-align: center;
  user-select: none;

color: #125165;
}
.a>span{
  padding: 10px 20px;
  background-color: lightblue;
  display: block;
  box-shadow: inset 0 0 0 2px #125165;

  color:  #125165;
}
.z>ul{
  list-style: none;
  margin: 0;
   position: absolute;
  top:10px;
  padding-inline-start: 0;

  background-color: lightblue;
  left: 0;
  /*left 不包含border*/
  width: 100%;
  box-shadow: inset 0 0 0 2px #125165;

}

.z>ul>li{
  padding: 10px 0;
}
.z{
  position: relative;
}
.z>ul>li:hover,div>ul>li.active{
  background-color: #125165;
  color: lightblue;
}
</style>

这个是使用方法:

在引用页使用:

  <my-select2 @selected="useItem2" :list="fruits2"/>

数据格式:

      fruits2:[
        {
          label:'苹果',
          value:'apple',
          key:'12'
        },
        {
          label:'梨子',
          value:'pear',
          key:'13'
        },
        {
          label:'香蕉',
          value:'banana',
          key:'14'
        },
        {
          label:'橘子',
          value:'orange',
          key:'15'
        },
        {
          label:'柠檬',
          value:'lemon',
          key:'16'
        },
      ],

接受方法:

useItem2:function (o){
      console.log(o)
    },

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给Vue中的下列表框赋值,可以使用v-model指令来进行数据绑定。在数据对象中定义一个属性,然后将该属性与下列表框的选中值进行绑定即可。在提供的代码中,可以看到在Vue实例中的data属性中定义了一个名为optionsList的数组,该数组包含了下列表框的选项。每个选项都有一个key和value属性,分别表示显示的文本和对应的值。在Vue实例中,将该数组与下列表框的v-model进行绑定,即使用v-model="selected",其中selected是Vue实例中定义的一个属性,用于存储选中项的值。通过这种方式,Vue会自动将选中的值与selected属性进行绑定,并在下列表框的选中项变化时更新selected的值。因此,就实现了给下列表框赋值的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Vue实现下列表框批量添加选项](https://blog.csdn.net/cnds123321/article/details/104030850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue+Element中table表格实现可编辑(select下框)](https://download.csdn.net/download/weixin_38598213/13129617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue中下菜单的赋值问题](https://blog.csdn.net/m0_72167535/article/details/127051361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值