Element UI ColorPicker 实时更新绑定值并转换 Hex 颜色的完整方案

Element UI ColorPicker 实时更新绑定值并转换 Hex 颜色的完整方案

在 Element UI 的 ColorPicker 组件中,默认需要通过确认按钮(或关闭颜色选择面板)才会触发 v-model 的更新。若希望实时更新绑定值(如拖动选色时立即生效),可以通过监听 active-change 事件实现。以下是具体解决方案:

html 复制代码
<template>
  <el-color-picker 
    v-model="color" 
    @active-change="handleActiveChange" 
  />
</template>

<script>
export default {
  data() {
    return {
      color: ''
    }
  },
  methods: {
    handleActiveChange(newColor) {
      // 直接更新绑定值,无需等待确认
      this.color = newColor;
    }
  }
}
</script>

至此,不需要颜色转换的童鞋已经可以右上角点叉了。但是我们项目里面用hex格式会方便一些,然而此处的active-change的参数中color字符串的格式是rgb的,因此还需要找一下有没有方案能转换成hex格式。于是看到colorPicker的配置项里面有color-format,于是就走了以下弯路:

html 复制代码
<template>
  <el-color-picker 
    v-model="color" 
    color-format="hex"
    @active-change="handleActiveChange" 
  />
</template>

结果就是配置了之后active-change中还是接收到rgb格式的字符串。这个时候必须狠狠的阅读一下源码,准备在心里制裁审判写这个代码的家伙学习一下大佬的思路

这里的displayedRgb是把颜色统一成rgb格式,方便后面对比颜色是否相同。所以color-format并不能影响active-change的传参,那么只能考虑自行转换了。本来已经准备在AI上面copy一段rgb转hex的代码,转头又想看看element-ui的大佬是怎么转换的颜色,结果发现人家早就在colorPicker中提供了一个处理颜色Color类。于是再次狠狠阅读一下Color的源码。

好好好,原来谜底就在谜面上

改造一下代码

html 复制代码
<script>
import Color from 'element-ui/packages/color-picker/src/color';

export default {
  data() {
    return {
      color: ''
    }
  },
  methods: {
    handleActiveChange(newColor) {
      const newColor = new Color({
        enableAlpha: false,
        format: 'hex'
      })
      newColor.fromString(colorStr);
      this.value = newColor.value;
    }
  }
}
</script>

okk, 问题解决,下班收工

相关推荐
_codeOH5 小时前
Vue 3 vs React 19:框架还在卷,核心原理就这些
前端·vue.js
英勇无比的消炎药6 小时前
新手必看玩转TinyRobot一定要避开这些坑
前端·vue.js
英勇无比的消炎药6 小时前
别再盲目混用AI组件库和传统组件库差距原来这么大
前端·vue.js
英勇无比的消炎药8 小时前
前端提效神器全新AI组件库TinyRobot改写日常开发模式
前端·vue.js
英勇无比的消炎药8 小时前
前端提效神器TinyRobot
前端·vue.js
CDwenhuohuo9 小时前
uni 背景色渐变 全屏
前端·javascript·vue.js
爱怪笑的小杰杰9 小时前
Vue 项目交付第三方开发,如何隐藏核心 JS 源码?
前端·javascript·vue.js
小二·9 小时前
Vue 3 组合式 API 进阶实战
前端·javascript·vue.js
rising start10 小时前
九、vue3 组件通信:全场景详解
前端·vue.js·typescript
编程技术手记10 小时前
Vue Scoped CSS 与动态创建 DOM 的兼容性问题
前端·css·vue.js