关于element-plus中el-select自定义标签及样式的问题

关于element-plus中el-select自定义标签及样式的问题

我这天天的都遇到各种坑,关于自定义,我直接复制粘贴代码都实现不了,研究了一下午,骂骂咧咧了一下午,服气了。官网代码实现不了,就只能 " 曲线救国 " 了,哈哈哈

1. 先看最终实现的效果

五种程度,每种颜色都不同,回显也需要分不同颜色

2. 再看看官网是怎么写的
  • label + value 形式
js 复制代码
	<el-select
      v-model="value1"
      placeholder="Select"
      style="width: 240px"
      clearable
    >
    // 核心代码: #label="{ label, value }" 插槽
      <template #label="{ label, value }">
        <span>{{ label }}: </span>
        <span style="font-weight: bold">{{ value }}</span>
      </template>
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
  • 多选 + options自定义 + 回显自定义
js 复制代码
// 这串代码options自定义是没问题的,但是回显根本不理我啊,我很难受!
<el-select v-model="value" multiple placeholder="Select" style="width: 240px">
    <el-option
      v-for="item in colors"
      :key="item.value"
      :label="item.label"
      :value="item.value"
    >
      <div class="flex items-center">
        <el-tag :color="item.value" style="margin-right: 8px" size="small" />
        <span :style="{ color: item.value }">{{ item.label }}</span>
      </div>
    </el-option>
    // 不好使啊,至少在我的项目中是的
    <template #tag>
      <el-tag v-for="color in value" :key="color" :color="color" />
    </template>
  </el-select>

这两种一结合,我觉得我瞬间行了(男人不能说不行)

现实给了我一耳光,并赋予我骂骂咧咧一下午的资格,草(一种植物)

3. 解决问题
  • 解决options下拉框数据颜色问题
  • 通过prefix前置插槽,将label数据作为前置,添加到输入框中回显
  • 将输入框原本回显的lebal数据隐藏,嘿嘿
html 复制代码
<!-- html -->
<el-form-item label="紧急程度:" class="select-one">
   <el-select v-model="item.urgencyLevel" placeholder="单选">
       <template #prefix>
       <!-- 将前置插槽数据设置为label的值 -->
          <span :style="{ color: itemStyleColor(item.urgencyLevel['color']}" style="font-weight:600;">{{itemStyleColor(item.urgencyLevel)['label'] }}</span>
      </template>
      <!-- options下拉框数据 -->
      <el-option v-for="el in urgencyLevels" :label="el.label" :value="el.value">
         <span :style="{ color: el.color }">{{ el.label }}</span>
      </el-option>
   </el-select>
</el-form-item>
js 复制代码
// js
// options数据
let urgencyLevels = [
    { color: '#852527', label: '危急', value: 'critical' },
    { color: '#ff2430', label: '紧急且重要', value: 'urgentAndImportant' },
    { color: '#ff9100', label: '重要', value: 'important' },
    { color: '#D3E713', label: '需关注', value: 'attentionRequired' },
    { color: '#40ab99', label: '不重要', value: 'notImportant' }
]
// 获取颜色的方法,通过v-model的值来选择当前的回显和颜色
// 我就直接手写了,当然也可以选择用find方法,直接返回的就是一个对象
const itemStyleColor = (val) => {
    switch (val) {
        case 'critical':
            return { color: '#852527', label: '危急' }
        case 'urgentAndImportant':
            return { color: '#ff2430', label: '紧急且重要' }
        case 'important':
            return { color: '#ff9100', label: '重要' }
        case 'attentionRequired':
            return { color: '#D3E713', label: '需关注' }
        case 'notImportant':
            return { color: '#40ab99', label: '不重要' }
    }
}

代码到目前为止,效果是这样的,所以嘞,我们就隐藏一个没有动态变色的value

scss 复制代码
// css
// 将回显的input框内的数据变成和背景色一样的颜色
// 我使用了深度选择器,是用/deep/还是:deep,根据项目来定
:deep(.select-one) {
        .el-input__inner {
            color: #fff;
        }
    }
4. 最后

具体为啥我的项目中就实现不了官网的效果,原因我还在查找,找到了之后会写在评论区,如果有小伙伴知道,也欢迎评论;如有不足之处,请指正!

相关推荐
dy171742 分钟前
element-plus表格默认展开有子的数据
前端·javascript·vue.js
2501_915918414 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂5 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技5 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip5 小时前
JavaScript二叉树相关概念
前端
一朵梨花压海棠go6 小时前
html+js实现表格本地筛选
开发语言·javascript·html·ecmascript
attitude.x6 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习
β添砖java6 小时前
CSS3核心技术
前端·css·css3
空山新雨(大队长)6 小时前
HTML第八课:HTML4和HTML5的区别
前端·html·html5