Vue+elementUI下拉框自定义颜色选择器方式

 更新时间:2023年02月23日 10:31:59   作者:走在菜鸟路上  
这篇文章主要介绍了Vue+elementUI下拉框自定义颜色选择器方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

elementUI下拉框自定义颜色选择器

组件的定义

1.定义颜色选择器组件

话不多说,直接上代码

<template>
  <el-select ref="colorSelect" placeholder="" v-model="myColor" style="width: 100%" @change="handleChange">
    <el-option
      v-for="item in colorList"
      :key="item"
      label=" "
      :value="item"
      v-html="'<div style=background-color:'+ item+';width:' +'100%'+';height:'+'90%'+'></div>'">
    </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["background-color"] = color;
            icon[0].style["color"] = "black";
          }
        })
      },
      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>

</style>

组件使用了model,不明白的可以查看官网https://cn.vuejs.org/v2/api/#model

父组件使用步骤

1.引入子组件

具体进入路径要看你的子组件位置

import colorSelect from "../../../elements/colorSelect";

2.声明组件

在components中声明组件

	components: {
      colorSelect
    }

3.子组件使用

在data中定义自己的颜色数组与绑定属性

data(){
	//颜色初始数据
	colorList: ["#FFC0CB", "#DB7093", "#FF1493", "#DC143C",
		"#DDA0DD", "#DA70D6", "#FF00FF", "#9370DB",
		"#800080", "#6495ED", "#4169E1", "#0000FF",
		"#87CEEB", "#E1FFFF", "#00FFFF", "#7FFFAA",
		"#00FF7F", "#008000", "#FFFFE0", "#FFFF00",
		"#FFD700", "#F5DEB3", "#FFA500", "#CD5C5C"],
	//可设置默认值
	color:'#FFC0CB'
}

使用

<color-select :color-list="colorList" v-model="color"></color-select>

完(最后贴图一张)

elementUI中修改下拉框的背景颜色和字体颜色

在项目开发过程中,需要用到下拉框,于是想到使用elementUI中的下拉框

就是需要修改一下字体颜色和背景颜色

/deep/.el-input__inner {
  background-color: rgba(108,113,127,30%);
  border: 1px solid rgba(13, 43, 81, 0.1);
  color: rgba(116, 116, 116, 1);
  padding: 0 0px 0 5px;
  font-size: 12px;
  border-radius: 0px;
}

至此都是顺利的,但是在修改背景图片的时候,在浏览器上修改可以生效的样式,写到代码里就不生效了,于是开始百度之旅

/deep/.el-select-dropdown{
  background-color: rgb(51 55 64)!important;
  /* background-color: #f0f; */
  color: rgba(116, 116, 116, 1)!important;
  border: none;
}

官方的解释:

Popper-append-to-body属性是Element-UI官方文档中提供的一个属性,该属性的用途就是将el-select选项的内容移动div#app当中,默认值是true

:popper-append-to-body="false"

自此,问题解决!!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue如何通过某个字段获取详细信息

    vue如何通过某个字段获取详细信息

    这篇文章主要介绍了vue如何通过某个字段获取详细信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  •  用Vue Demi 构建同时兼容Vue2与Vue3组件库

     用Vue Demi 构建同时兼容Vue2与Vue3组件库

    这篇文章主要介绍了 用Vue Demi 构建同时兼容Vue2与Vue3组件库,我们通过考虑其功能、工作原理以及如何开始使用它来了解 Vue Demi,下面我们一起进入文章学起来吧
    2022-02-02
  • 在移动端使用vue-router和keep-alive的方法示例

    在移动端使用vue-router和keep-alive的方法示例

    这篇文章主要介绍了在移动端使用vue-router和keep-alive的方法示例,vue-router与keep-alive提供的路由体验与移动端是有一定差别的,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • vue使用nprogress加载路由进度条的方法

    vue使用nprogress加载路由进度条的方法

    这篇文章主要介绍了vue使用nprogress加载路由进度条的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Vue-loader使用教程

    Vue-loader使用教程

    Vue-loader其实就是一个webpack的loader,用来把vue组件转换成可部署的js, html, css模块,这篇文章主要介绍了Vue-loader使用教程,需要的朋友可以参考下
    2022-08-08
  • 解决vue中数据更新视图不更新问题this.$set()方法

    解决vue中数据更新视图不更新问题this.$set()方法

    这篇文章主要介绍了解决vue中数据更新视图不更新问题this.$set()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue.js动态组件和插槽的使用汇总

    vue.js动态组件和插槽的使用汇总

    这篇文章主要介绍了vue.js动态组件和插槽的使用汇总,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • vue中使用mixins/extends传入参数的方式

    vue中使用mixins/extends传入参数的方式

    这篇文章主要介绍了vue中使用mixins/extends传入参数的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue echarts实现绑定事件和解绑事件

    vue echarts实现绑定事件和解绑事件

    这篇文章主要介绍了vue echarts实现绑定事件和解绑事件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 基于Vue实现树形穿梭框的示例代码

    基于Vue实现树形穿梭框的示例代码

    这篇文章主要为大家介绍了如何利用Vue实现一个树形穿梭框,elementUI和ant-d组件库的穿梭框组件效果都不是很好,所以本文将利用一个新的插件来实现,需要的可以参考一下
    2022-04-04

最新评论