<el-select> 在下拉选项框中添加一个按钮,实现子选项的添加

在这里插入图片描述

父组件

 

<el-select
                    v-model="value"
                    placeholder="请选择"
                    ref="add"
                    @visible-change="
                      (v) =>
                        visibleChange(
                          v,
                          'add',
                          //() => {
                           // categoriesClick(temp);//需要传递参数
                         // },
                         categoriesClick,//无需参数
                          '添加设备'
                        )
                    "
                  >
                    <el-option
                      v-for="itemin options"
                      :key="item.value"
      				  :label="item.label"
    			 	  :value="item.value"
                    />
                  </el-select>


<el-dialog
        title="添加子选项"
        :visible.sync="openOff"
        width="70%"
        append-to-body
      >
        <childrenVue 
          @closeHandle="closeHandle"
        />
      </el-dialog>

<script>
import childrenVue from "子组件路径";
  export default {
  components: { childrenVue  },
    data() {
      return {
        openOff:false,
        options: [{
          value: '选项1',
          label: '黄金糕'
        }, {
          value: '选项2',
          label: '双皮奶'
        }, {
          value: '选项3',
          label: '蚵仔煎'
        }, {
          value: '选项4',
          label: '龙须面'
        }, {
          value: '选项5',
          label: '北京烤鸭'
        }],
        value: ''
      }
    }
    methods:{
// 关闭弹窗(传递给子组件处理弹窗关闭)
    closeHandle() {
      this.openOff = false;
    },
    // 弹出添加子选项弹窗(value未传递的参数)
    categoriesClick(value) {   
      this.openOff = true;
    },
    // 在下拉框处显示添加按钮
    visibleChange(visible, refName, onClick, addname) {
      if (visible) {
        const ref = this.$refs[refName];
        let popper = ref[0].$refs.popper;
        if (popper.$el) popper = popper.$el;
        if (
          !Array.from(popper.children).some(
            (v) => v.className === "el-cascader-menu__list"
          )
        ) {
          const el = document.createElement("ul");
          el.className = "el-cascader-menu__list";
          el.style =
            "border-top: solid 1px #E4E7ED; padding:0; color: #606266;";
          el.innerHTML =
            `<li class="el-cascader-node text-center" style="height:50px;line-height: 50px">
                <span class="el-cascader-node__label"><i class="font-blue el-icon-plus"></i>` +
            addname +
            `</span>
                </li>`;
          popper.appendChild(el);
          el.onclick = () => {
            // 底部按钮的点击事件 点击后想触发的逻辑也可以直接写在这
            onClick && onClick();

            // 以下代码实现点击后弹层隐藏 不需要可以删掉
            if (ref[0].toggleDropDownVisible) {
              ref[0].toggleDropDownVisible(false);
            } else {
              ref[0].visible = false;
            }
          };
        }
      }
    },
	}
  }
</script>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-select一个基于Element UI的下拉选择框组件,支持单选、多选、远程搜索等功能。可以通过设置不同的属性来实现不同的功能,例如设置multiple属性可以实现多选功能,设置filterable属性可以实现搜索功能等。 以下是一个el-select的基本用法示例: ```html <el-select v-model="selectedOption" placeholder="请选择"> <el-option label="选项1" value="option1"></el-option> <el-option label="选项2" value="option2"></el-option> <el-option label="选项3" value="option3"></el-option> </el-select> ``` 其中,v-model绑定了一个名为selectedOption的变量,用于存储用户选择的值。placeholder属性设置了默认提示文本。 如果需要实现多选功能,可以在el-select上设置multiple属性: ```html <el-select v-model="selectedOptions" multiple placeholder="请选择"> <el-option label="选项1" value="option1"></el-option> <el-option label="选项2" value="option2"></el-option> <el-option label="选项3" value="option3"></el-option> </el-select> ``` 其中,v-model绑定了一个名为selectedOptions的数组,用于存储用户选择的多个值。 如果需要实现搜索功能,可以在el-select上设置filterable属性: ```html <el-select v-model="selectedOption" filterable placeholder="请选择"> <el-option label="选项1" value="option1"></el-option> <el-option label="选项2" value="option2"></el-option> <el-option label="选项3" value="option3"></el-option> </el-select> ``` 其中,filterable属性设置为true,表示开启搜索功能。 如果需要实现全选功能,可以在el-select上设置一个名为options的属性,用于存储所有可选项,然后在el-select添加一个名为options的slot,用于自定义下拉框中的内容,包括全选按钮和可选项列表。具体实现方式可以参考以下代码: ```html <el-select v-model="selectedOptions" multiple placeholder="请选择" :options="options"> <template #options> <el-checkbox v-model="isAllSelected" @change="handleAllSelectedChange">全选</el-checkbox> <el-option v-for="option in options" :key="option.value" :label="option.label" :value="option.value" :disabled="option.disabled"> <el-checkbox v-model="selectedOptions" :label="option.value" :disabled="option.disabled">{{ option.label }}</el-checkbox> </el-option> </template> </el-select> ``` 其中,options属性存储了所有可选项,isAllSelected变量用于存储全选状态,handleAllSelectedChange方法用于处理全选状态变化事件。在options slot中,首先添加一个el-checkbox用于全选,然后使用v-for循环遍历options数组,为每个可选项添加一个el-option,其中包含一个el-checkbox用于选择该项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值