element-ui选择器的二次封装

本文介绍了一种基于Element UI的二次封装方法,旨在提升组件复用性和代码简洁性。通过自定义设置和选项,实现灵活的选择器组件,适用于多种场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对element的二次封装主要是提高组件的复用性,降低代码的复杂,引用的组件只需要传入必要的data参数和settings配置以及@select事件即可

<template>
    <div class="select-container">
      <span v-if="settings.title">{{settings.title}}</span>
      <el-select
        v-model="value"
        :size="settings.size||'mini'"
        :style="{width:settings.width}"
        @change="handeleChange"
        :placeholder="settings.placeholder"
        :multiple="settings.isMultiple"
      >
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label||item.value"
          :value="item.value"
        ></el-option>
      </el-select>
    </div>
</template>

<script>
/* 
  settings:{
      placeholder 提示语,默认 "请选择"
      isSelected 是否以选项第一个作为当前项,默认false
      isMultiple 是否多选,默认false,
      title   选择器名称,
      size: 选择器尺寸,默认mini
      width 选择器宽度,默认element-ui自带的默认宽度
  }
  options:[
      { value 必填 , label 选填,如果不传,以value的值展示 }
  ]

*/

export default {
name: "",
props: {
  data: { type: Array, default: () => [], required: true },
  settings: {
    type: Object,
    default: () => {
      return {
        placeholder: "请选择",
        isSelected: false,
        isMultiple: false,
        title: "",
        size: "mini"
      };
    }
  }
},
data() {
  return {
    value: this.settings.isSelected ? this.options[0].value : ""
  };
},
methods: {
  handeleChange(e) {
    this.$emit("select", e);
  }
}
};
</script>

<style  scoped>
.select-container {
width: 15%;
}
</style>

使用实例

<template>
  <div>
    <v-select :data="options" :settings="settings"  @select="handleSelect" />
  </div>
</template>

<script>
import vSelect from "@/components/Select";
export default {
  name: "",
  data() {
    return {
      options: [
        { value: "选项1" },
        { value: "选项2" },
        { value: "选项3" },
        { value: "选项4" },
        { value: "选项5" }
      ],
      settings: { title: "选择器" }
    };
  },
  components: { vSelect },
  methods: {
    handleSelect(e) {
      console.log(e);
    }
  }
};
</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值