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

x33g5p2x  于2022-08-17 转载在 其他  
字(2.8k)|赞(0)|评价(0)|浏览(726)

先看效果


 

一、定义颜色选择器组件

  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. '<div class=se style=background-color:' +
  16. item +
  17. ';width:30px;border-radius:3px;display:inline-block;height:' +
  18. '90%' +
  19. '><span style=margin-left:40px;>颜色</span></div>'
  20. "
  21. >
  22. </el-option>
  23. </el-select>
  24. </template>
  25. <script>
  26. export default {
  27. name: "colorSelect",
  28. //允许一个自定义组件在使用 v-model 时定制 prop 和 event。默认情况下,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event,
  29. //但是一些输入类型比如单选框和复选框按钮可能想使用 value prop 来达到不同的目的。使用 model 选项可以回避这些情况产生的冲突。
  30. model: {
  31. prop: "color",
  32. event: "update",
  33. },
  34. props: {
  35. //颜色数组
  36. colorList: {
  37. type: Array,
  38. default: () => {
  39. return ["#FFC0CB", "#DB7093", "#FF1493", "#DC143C"];
  40. },
  41. },
  42. //父组件绑定的值
  43. color: {
  44. type: String,
  45. default: undefined,
  46. },
  47. },
  48. data() {
  49. return {
  50. myColor: undefined,
  51. };
  52. },
  53. methods: {
  54. //设置颜色选择框中颜色
  55. setSelectColor(color) {
  56. //通过操作dom节点改变样式
  57. this.$nextTick(() => {
  58. let dom = this.$refs.colorSelect;
  59. if (dom) {
  60. dom = dom.$el.children[0];
  61. let inputDom = dom.querySelectorAll(".el-input__inner");
  62. let icon = dom.querySelectorAll(".el-input__icon");
  63. inputDom[0].style["padding-left"] = "43px";
  64. icon[0].style["color"] = "black";
  65. // 已选择的色块
  66. var li = document.createElement("div");
  67. li.className = "sekuai";
  68. inputDom[0].value = "红色";
  69. dom.querySelectorAll(".el-input__suffix")[0].appendChild(li);
  70. dom.querySelectorAll(".sekuai")[0].style["background"] = color;
  71. }
  72. });
  73. },
  74. handleChange(val) {
  75. this.setSelectColor(val);
  76. //触发update事件更新父组件绑定值
  77. this.$emit("update", val);
  78. },
  79. },
  80. created() {
  81. if (this.color && this.color.length > 0) {
  82. this.myColor = this.color;
  83. this.setSelectColor(this.color);
  84. }
  85. },
  86. watch: {
  87. color: function (val) {
  88. this.setSelectColor(val);
  89. },
  90. },
  91. };
  92. </script>
  93. <style scoped>
  94. .se {
  95. display: inline-block;
  96. }
  97. </style>

这里有用到v-html:可以切换内部html元素 

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

二、引用组件并注册

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

三、使用

  1. <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. }

相关文章