• Vue+elementUI二次封装之颜色选择器


    先看效果

     

    一、定义颜色选择器组件

    1. <template>
    2. <el-select
    3. ref="colorSelect"
    4. placeholder=""
    5. v-model="myColor"
    6. style="width: 100%"
    7. @change="handleChange"
    8. >
    9. <el-option
    10. v-for="item in colorList"
    11. :key="item"
    12. label=" "
    13. :value="item"
    14. v-html="
    15. '
    16. item +
    17. ';width:30px;border-radius:3px;display:inline-block;height:' +
    18. '90%' +
    19. '>颜色
      '
  • "
  • >
  • 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: () => {
  • return ["#FFC0CB", "#DB7093", "#FF1493", "#DC143C"];
  • },
  • },
  • //父组件绑定的值
  • color: {
  • type: String,
  • default: undefined,
  • },
  • },
  • data() {
  • return {
  • myColor: undefined,
  • };
  • },
  • methods: {
  • //设置颜色选择框中颜色
  • setSelectColor(color) {
  • //通过操作dom节点改变样式
  • this.$nextTick(() => {
  • let dom = this.$refs.colorSelect;
  • if (dom) {
  • dom = dom.$el.children[0];
  • let inputDom = dom.querySelectorAll(".el-input__inner");
  • let icon = dom.querySelectorAll(".el-input__icon");
  • inputDom[0].style["padding-left"] = "43px";
  • icon[0].style["color"] = "black";
  • // 已选择的色块
  • var li = document.createElement("div");
  • li.className = "sekuai";
  • inputDom[0].value = "红色";
  • dom.querySelectorAll(".el-input__suffix")[0].appendChild(li);
  • dom.querySelectorAll(".sekuai")[0].style["background"] = color;
  • }
  • });
  • },
  • handleChange(val) {
  • this.setSelectColor(val);
  • //触发update事件更新父组件绑定值
  • this.$emit("update", val);
  • },
  • },
  • created() {
  • if (this.color && this.color.length > 0) {
  • this.myColor = this.color;
  • this.setSelectColor(this.color);
  • }
  • },
  • watch: {
  • color: function (val) {
  • this.setSelectColor(val);
  • },
  • },
  • };
  • script>
  • <style scoped>
  • .se {
  • display: inline-block;
  • }
  • style>
  • 这里有用到v-html:可以切换内部html元素 

    v-text的话只能切换内部文字

    二、引用组件并注册

    1. import colorSelect from "../../commonview/colorSelect.vue";
    2. components: {
    3. colorSelect
    4. }

    三、使用

    <color-select :color-list="colorList" v-model="color">color-select>
    
    1. data(){
    2. //颜色初始数据
    3. colorList: ["#FFC0CB", "#DB7093", "#FF1493", "#DC143C",
    4. "#DDA0DD", "#DA70D6", "#FF00FF", "#9370DB",
    5. "#800080", "#6495ED", "#4169E1", "#0000FF",
    6. "#87CEEB", "#E1FFFF", "#00FFFF", "#7FFFAA",
    7. "#00FF7F", "#008000", "#FFFFE0", "#FFFF00",
    8. "#FFD700", "#F5DEB3", "#FFA500", "#CD5C5C"],
    9. //可设置默认值
    10. color:'#FFC0CB'
    11. }

  • 相关阅读:
    机器学习中类别不平衡问题的解决方案
    java如何创建一个只读集合呢?
    掌握Node Version Manager(nvm):跨平台Node.js版本管理
    如何远程、在线调试app?
    基础汇编语言编程
    再谈线程池——深入剖析线程池的前世今生
    7.29
    gcc编译C语言
    vue3后台管理系统之pinia及持久化集成使用
    近世代数——Part1 课后题目
  • 原文地址:https://blog.csdn.net/weixin_52691965/article/details/126037224