select选择框里填充图片,下拉选项带图片

文章描述了如何在Vue应用中实现一个下拉框,用户可以从预定义的图标列表中选择一个并动态改变其样式。代码展示了使用ElementUI的el-select组件,以及如何在mounted钩子中添加初始图片和在change事件中更新图片属性。
摘要由CSDN通过智能技术生成

遇到一个需求,选择下拉框选取图标,填充到框里

1、效果展示

在这里插入图片描述

2、代码

  <el-form-item label="工种图标" class="Form_icon Form_label">
        <el-select ref="select" :value="formLabelAlign.icon" placeholder="请选择"
                        :popper-append-to-body="false" @change="changIcon">
                        <el-option v-for="item in icons" :key="item.value" :value="item.value">
                            <div class="Form_label_select">
                                <img :src="item.icon" class="Form_label_img">

                            </div>
                        </el-option>
                    </el-select>
                         </el-form-item>

先在mounted给下拉框添加一个img标签

     mounted() {
            const newLi = document.createElement("img");
            this.$refs['select'].$el.children[0].appendChild(newLi);
        
        },

选取图标的时候更改img样式

          changIcon(val) {
                let item = this.icons.filter((item) => { return item.value == val })

                let img = this.$refs['select'].$el.children[0].children[2];//该select数下来第三个子节点
                img.setAttribute('src', item[0].icon)//也可以写在下一步,item[0].icon得用${}括起来
                img.setAttribute('style', `
                 width: 35px;
                height:95%;
                position:absolute;
                left:0;
                background:white;
                `)
                this.formLabelAlign.icon = val
            },

注意:图片路径的引入得用import,否则找不到,无法显示

   import icon1 from '@/assets/aaa/icon1.png';
    import icon2 from '@/assets/aaa/icon2.png';
    import icon3 from '@/assets/aaa/icon3.png';

 icons: [{ value: '1', icon: icon1, checked: false }, { value: '2', icon: icon2, checked: false }, { value: '3', icon: icon3, checked: false },
                ]
   ::v-deep .Form_icon.el-select {
        display: inline-block;
        position: relative;
        width: 100%;
        border: 1px solid #DCDFE6;
        border-radius: 4px;
        padding: 2px 0 2px 12px;
        box-sizing: border-box;

    }

    ::v-deep .Form_icon.el-popper[x-placement^=bottom] {
        margin-left: -10px;
    }



    ::v-deep .Form_icon.el-input__inner {
        border: none;
        padding-left: 0;

    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值