element-ui在下拉选项框中添加一个按钮,实现子选项的添加

在这里插入图片描述

父组件

<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>

子组件

<template>
  <div>
   <el-button
        type="primary"
        size="small"
        @click="close"
        >点击关闭</el-button
      >
  </div>
</template>

<script>
  export default {
    
    
    data() {
    
    
      return {
    
    
      }
    }
    methods:{
    
    
		close(){
    
    
			this.$emit("closeHandle");
		}
	}
  }
</script>

猜你喜欢

转载自blog.csdn.net/fangqi20170515/article/details/129819474