element-ui 中 el-select 组件 多选时,如何根据数据的属性自定义选中内容的背景颜色?

发布于 2022-09-13 01:23:31 字数 1064 浏览 21 评论 0



如何根据 options 中每个选项元素的 bgColor 属性来控制被选中的内容的不同的背景颜色呢?
就是达到上图的显示效果

<template>
  <el-select v-model="value1" multiple placeholder="请选择">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
  export default {
    data() {
      return {
        options: [{
          value: '选项1',
          label: 'aaa',
          bgColor:'#409EFF'
        }, 
        {
          value: '选项2',
          label: 'bbb',
          bgColor:'red'
        }, 
        {
          value: '选项3',
          label: 'ccc',
          bgColor:'orange'
        }, 
        {
          value: '选项4',
          label: 'ddd',
          bgColor:'yellow'
        }, 
        {
          value: '选项5',
          label: 'eee',
          bgColor:'brown'
        }],
        value1: [],
      }
    }
  }
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不顾 2022-09-20 01:23:31

https://codepen.io/1567887123...

<template>
  <el-select v-model="value1" multiple class="tagStyle" placeholder="请选择" @change="change">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value" tags-size="mini"
      :style="{color:item.bgColor}">
    </el-option>
  </el-select>
</template>
var Main = {
  data() {
    return {
      tagStyleElem: "",
      options: [
        {
          value: "选项1",
          label: "aaa",
          bgColor: "#409EFF"
        },
        {
          value: "选项2",
          label: "bbb",
          bgColor: "red"
        },
        {
          value: "选项3",
          label: "ccc",
          bgColor: "orange"
        },
        {
          value: "选项4",
          label: "ddd",
          bgColor: "yellow"
        },
        {
          value: "选项5",
          label: "eee",
          bgColor: "brown"
        }
      ],
      value1: []
    };
  },
  methods:{
    change(){
      this.tagStyleElem.innerHTML = this.value1
      .map(
        (value, index) => `.tagStyle .el-tag:nth-child(${index + 1}) {color: #fff;background-color: ${this.options.find(item=>value == item.value)?.bgColor};}`)
      .join("");
    }
  },
  created() {
    this.tagStyleElem = window.document.head.appendChild(
      document.createElement("style")
    );
    
  }
};
var Ctor = Vue.extend(Main);
new Ctor().$mount("#app");

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文