当前位置: 首页 > news >正文

elementPlus 的el-select二次封装

el-select, 在vue3里面自定义封装组件

  • el-select
    • 页面中使用

el-select

select.vue组件
<template>
  <!-- 单个下拉 Carter 2022/8/29 -->

  <el-select
    @change="selectChange"
    v-model="selectValue"
    :disabled="disabled"
    :multiple="multiple"
    :filterable="filterable"
    :placeholder="placeholder ? placeholder : '请选择'"
    :size="size ? size : 'default'"
    :style="'width:' + width"
    clearable
  >
    <el-option
      v-for="item in options"
      :key="item.id"
      :label="item.name"
      :value="item.id"
    />
  </el-select>
</template>

<script setup>
/**
 * @desc 封装 element UI el-select
 * @param {selectValue} [v-model] - 双向绑定的值
 * @param {String} [type] [v-bind]- 使用哪个下拉值
 * @param {String} [size] [v-bind]- 对应el-select的size
 * @param {String} [placeholder] [v-bind]- 提示
 * @param {disabled} [Boolean] [v-bind]- 是否禁用
 * @param {multiple} [Boolean] [v-bind]- 是否可以多选
 * @param {filterable} [Boolean] [v-bind]- 是否可以搜索
 * @param {String} [width] [v-bind]- select的长度
 * @example <Select v-model:selectValue='ruleForm.a' type="configType" width="100%" placeholder="选择配置类型" />
 */
import { onMounted, ref } from 'vue'
import { selectData } from './formJs/select' //所有前端定义的下拉数据
const props = defineProps({
  type: {
    type: String,
    required: true
  },
  size: {
    type: String,
    default: 'default'
  },
  placeholder: {
    type: String,
    default: '请选择'
  },
  selectValue: {
    required: true
  },
  width: {
    type: String,
    default: '214px'
  },
  disabled: {
    type: Boolean,
    default: false
  },
  multiple: {
    type: Boolean,
    default: false
  },
  filterable: {
    type: Boolean,
    default: true
  }
})
const emit = defineEmits(['update:selectValue'])
const options = ref([])

onMounted(() => {
  getOptions(props.type) //获取下拉选择的数据 ,自定义
})
const selectChange = e => {
  //选择下拉事件
  emit('update:selectValue', e)
}
const getOptions = type => {
  //获取下拉的选项
  selectData.forEach((v, i) => {
    if (type === v.type) {
      options.value = v.vals
    }
  })
}
</script>
<style scoped lang="scss"></style>

页面中使用

<template>
  <!-- Carter 2022/8/29 页面-->
  <div class="page-wrap">
    <div class="header-search">
      <el-form :inline="true" :model="pages" class="demo-form-inline">
        <el-form-item label="语言">
        <!-- 使用下拉组件-->
          <Select  
            v-model:selectValue="pages.language"
            type="language"
            placeholder="请选择语言"
          />
        </el-form-item>

  
      </el-form>
    </div>

  </div>
</template>
<script setup>
import { reactive, ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import Select from '@/components/form/select.vue'  //引入下拉组件

</script>
<style lang="scss" scoped></style>

在这里插入图片描述

相关文章:

  • mysql 8版本windows安装
  • 关于BLE5.3蓝牙串口透传芯片CH9142
  • 2022年的 自己
  • Unity UI Toolkit学习笔记-Runtime UI 案例实践
  • 成都聚华祥:抖音账户应该怎么做?
  • 基于elementPlus的el-upload的二次封装组件
  • 肾囊肿有哪些异常症状表现?
  • 适合学生用的蓝牙耳机哪款好?学生党无线蓝牙耳机推荐
  • 如何在linux系统上部署皕杰报表
  • 万魔和南卡蓝牙耳机哪款比较好用?万魔和南卡A2蓝牙耳机对比测评
  • 收藏:不能不刷的数字后端面试题,含解析
  • uniapp 小程序单页面设置横屏
  • 【Spring Cloud】新闻头条微服务项目:引入ElasticSearch建立文章搜索索引
  • 深度学习之文本分类 ----FastText
  • ITE IT6604E/AX HDMI1.4 接收器
  • [PHP内核探索]PHP中的哈希表
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Apache Spark Streaming 使用实例
  • DataBase in Android
  • JavaScript 基础知识 - 入门篇(一)
  • java正则表式的使用
  • Mysql5.6主从复制
  • Mysql数据库的条件查询语句
  • Node项目之评分系统(二)- 数据库设计
  • orm2 中文文档 3.1 模型属性
  • V4L2视频输入框架概述
  • Vue官网教程学习过程中值得记录的一些事情
  • 成为一名优秀的Developer的书单
  • 后端_MYSQL
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 检测对象或数组
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端面试总结(at, md)
  • 思维导图—你不知道的JavaScript中卷
  • 优秀架构师必须掌握的架构思维
  • ​卜东波研究员:高观点下的少儿计算思维
  • #define 用法
  • (1)STL算法之遍历容器
  • (C++17) std算法之执行策略 execution
  • (C++20) consteval立即函数
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (翻译)terry crowley: 写给程序员
  • (九)c52学习之旅-定时器
  • .naturalWidth 和naturalHeight属性,
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core 项目指定SDK版本
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /usr/bin/env: node: No such file or directory
  • :=
  • @Controller和@RestController的区别?
  • @JsonSerialize注解的使用
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AR]Vumark(下一代条形码)