element-plus el-select 的prefix如何使用?

其实是想要实现这样的样式:
el-select 多选,选中的内容以逗号分割,最小宽度80px;最大宽度300px;超出最大宽度显示省略号

就是大概是下面这样,一行显示已经处理了,但是最小80px,然后input框的宽度根据选中的项的字符串内容变大,最大300px,超过显示省略号还没想好如何处理,有无大佬给个思路。
看了网上有说可以用 el-select 的prefix,结合计算属性去实现,但是prefix试了没有效果。
找到的实现方法
虽然是vue2的,思路应该差不多,但是就是没有实现出来 :(
https://blog.csdn.net/weixin_57182748/article/details/130509312

image.png

<template>
  <div class="testPage-container page-container">
    <el-select
      class="select-auto-width"
      v-model="value1"
      multiple
      placeholder="Select"
    >
      <template slot="prefix">
        <span >这里是模仿选中的内容,强制一行排列</span> 
      </template>
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      />
    </el-select>
  </div>
</template>

<script setup>
import { computed, reactive, ref } from "vue"

const value1 = ref([])
const options = reactive( [ {
    value: 'Option1',
    label: 'Option1',
  },
  {
    value: 'Option2',
    label: 'Option2',
  },
  {
    value: 'Option3',
    label: 'Option3',
  },
  {
    value: 'Option4',
    label: 'Option4',
  },
  {
    value: 'Option5',
    label: 'Option5',
  },])
  const filterList = computed(()=>{
    const a = []
    options.forEach((item) => {
      value1.value.forEach((item1) => {
        if (item.value === item1) {
          a.push(item.label + "xx");    // xx这里是仿制选中后的X图标,可以自行设置,如果要求不太严格可以自行设置宽度
        }
      });
    });
    console.log(a)
    return a.join();
  })
</script>

<style lang="scss" scoped>
.select-auto-width{
  min-width: 100px;
  max-width: 300px;
  text-align: start;
  :deep(.el-select__tags){
    .el-select-tags-wrapper{
      white-space: nowrap;
    }
  }
  :deep(.el-input__prefix){
    position: relative;
    box-sizing: border-box;
    border: 1px solid #ffffff00;
    padding: 0 40px;
    height: 40px;
    line-height: 40px;
    color: #606266;
    left: 0;
    visibility: hidden;
  }
  .el-input__inner {
    position: absolute;
  }
}
</style>
阅读 5.2k
1 个回答

一般来说我的思路是用CSS覆写样式,使用 prefix 的方式我倒是没考虑过。
印象中之前有回答过类似的问题。简单实现的话就是改变一下背景色为透明,然后增加一个逗号的伪类。最后给外部容器增加单行超出省略号就行。
但是这样的话,因为你的需求是由删除已选功能的,所以后面的 x 图标就会很突兀,或者直接隐藏掉通过展开下拉框点击选项来取消勾选?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题