ant design vue select 增加和删除option选项

最近接触了一个select选择框,对option进行添加选项和删除选项,效果图入下:

主要整合功能点:

1.点击添加,新增一个option选项,使用 dropdownRender 对下拉菜单进行自由扩展

        

1.点击删除按钮,删除一个一个option选项,这个简单,但是点击其中一个选项会把删除图标一起带上去,不是我们的意愿,使用 optionLabelProp 指定回填到选择框的 Option 属性。

  

废话不多说,上代码主要两个功能设置:option-label-prop="label"和 slot="dropdownRender",很简单,别看代码很多。

<template>
  <div >
        <a-select v-model="group" placeholder="请选择分组"  option-label-prop="label">
          <div slot="dropdownRender" slot-scope="menu">
            <v-nodes :vnodes="menu" />
            <a-divider style="margin: 4px 0;" />
            <div style="padding: 4px 8px; cursor: pointer;" @mousedown="e => e.preventDefault()" @click="addItemShow">
              <a-icon type="plus" /> Add item
            </div>
          </div>
          <a-select-option class="delete-icon" :value="item" v-for="item in groupList" :key="item" :label="item">
              {{item}}
              <a-icon style="position: absolute;top:30%;right: 10%;" type="delete" @click.stop="deleteItem(item)" />
          </a-select-option>
        </a-select>
  </div>
</template>

<script>
export default {
  components: {
    VNodes: {
      functional: true,
      render: (h, ctx) => ctx.props.vnodes
    }
  },
  data () {
    return {
      groupList: ['未分组', '分组1', '分组2'],
      group: '未分组',
    }
  },

  methods: {
    /**
       * 删除分组选项
       */
    deleteItem (label) {
      const index = this.groupList.indexOf(label)
      this.groupList.splice(index, 1)
    },
    /**
       * 打开分组弹窗
       */
    addItemShow () {
      this.visible = true
    },
    /**
       * 关闭分组弹窗
       */
    handleCancel () {
      this.visible = false
    },
    /**
       * 添加分组选项
       */
    handleOk () {
      this.$refs.ruleForm.validate(valid => {
        if (valid) {
          if (!this.groupList.includes(this.form.name)) {
            this.groupList.push(this.form.name)
            this.$message.success('创建分组成功')
            this.handleCancel()
          } else {
            this.$message.error('存在相同分组名')
          }
        } else {
          return false
        }
      })
    },
  },
}

</script>
<style lang="less">
</style>

 

posted @ 2021-05-27 18:13  鸡腿太小  阅读(8051)  评论(0编辑  收藏  举报