下拉框是渐变色

子组件代码

template>
  <el-select
    ref="colorSelect"
    v-model="myColor"
    placeholder=""
    style="width: 100%; height:20px;"
    @change="handleChange"
  >
    <el-option
      v-for="(item, index) in colorList"
      :key="index"
      label=" "
      :value="item.colorSystem"
      :style="{
        background: item.color,
        width: '100%',
        height: '20px',
        margin: '2px 0',
      }"
    >
    </el-option>
  </el-select>
</template>

<script>
export default {
  name: 'ColorSelect',
  // 允许一个自定义组件在使用 v-model 时定制 prop 和 event。
  // 默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event,
 // 但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。
 // 使用 model 选项可以回避这些情况产生的冲突。
  model: {
    prop: 'color', // 接收的父组件的值
    event: 'update' // 更新的事件
  },
  props: {
    // 颜色数组
    colorList: {
      type: Array,
      default: () => {}
    },
    // 父组件绑定的值
    color: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      myColor: undefined
    }
  },
  watch: {
    color(val) {
      this.myColor = this.color
      this.setSelectColor(val)
    }
  },
  created() {
    if (this.color && this.color.length > 0) {
      this.myColor = this.color
      this.setSelectColor(this.color)
    }
    console.log(this.color)
  },
  methods: {
    colorSelect(item) {
      console.log(item)
    },
    // 设置颜色选择框中颜色
    setSelectColor(color) {
      console.log(color)
      // 通过操作dom节点改变样式
      this.$nextTick(() => {
        let renderColor
        this.colorList.forEach((item) => {
          if (item.colorSystem === color) {
            renderColor = item.color
          }
        })
        let dom = this.$refs.colorSelect
        if (dom) {
          dom = dom.$el.children[0]
          const inputDom = dom.querySelectorAll('.el-input__inner')
          const icon = dom.querySelectorAll('.el-input__icon')
          inputDom[0].style.background = renderColor
          icon[0].style.color = 'black'
        }
      })
    },
    handleChange(val) {
      console.log(val)
      this.setSelectColor(val)
      // 触发update事件更新父组件绑定值
      this.$emit('update', val)
    }
  }
}
</script>

<style scoped>
::v-deep .el-select-dropdown__list {
  padding: 0 !important;
}
::v-deep .el-input__inner{
  height:35px !important;
}
</style>

父组件引用
template的内容

<color-select
  :color-list="colorList"
  :color="color"
  size="small"
  style="width: 160px"
  @update="update"
 ></color-select>
//备注
//colorList:[] 下拉框颜色:渐变色是字符串
//color: '', // 可设置下拉框颜色默认值:Set1
//update:类似于change事件,可以写一些切换颜色选择后的代码逻辑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值