在el-select下拉框内实现增删改查

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

废话不多说,直接上效果和代码

 效果:在下拉框内就可以实现增删改查效果,不需要另外建立表格;

完整代码如下:

<template>
  <div class="select">
    <el-form :model="formData" class="form">
      <el-form-item label="自带增删改查的下拉框:">
        <el-select
          v-model="formData.value"
          :placeholder="$t('button.select')"
          ref="template"
          @visible-change="(v) => visibleChange(v, 'template')"
          :style="{ width: '300px' }"
          filterable
          clearable
        >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
            <span style="float: left" class="span-style">{{ item.label }}</span>
            <span
              style="float: right"
              class="span-style-delete"
              @click.stop="deleteItem(item)"
              ><i class="el-icon-delete"
            /></span>
            <span
              style="float: right"
              class="span-style"
              @click.stop="editItem(item)"
              ><i class="el-icon-edit-outline"
            /></span>
          </el-option>
        </el-select>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: [
        {
          value: 1,
          label: "黄金糕",
        },
        {
          value: 2,
          label: "双皮奶",
        },
        {
          value: 3,
          label: "蚵仔煎",
        },
        {
          value: 4,
          label: "龙须面",
        },
        {
          value: 5,
          label: "北京烤鸭",
        },
      ],
      formData: {
        value: "",
      },
    };
  },
  methods: {
    // 下拉时显示底下的新增按钮
    visibleChange(visible, refName) {
      if (visible) {
        const ref = this.$refs[refName];
        let product = ref.$refs.popper;
        if (product.$el) product = product.$el;
        if (
          !Array.from(product.children).some(
            (v) => v.className === "el-template-menu__list"
          )
        ) {
          const el = document.createElement("ul");
          el.className = "el-template-menu__list";
          el.style =
            "border-top:2px solid rgb(219 225 241); padding:0; color:rgb(64 158 255);font-size: 13px";
          el.innerHTML = `<li class="el-cascader-node text-center" style="height:37px;line-height: 50px;margin-left:10px;">
            <span class="el-cascader-node__label"><i class="font-blue el-icon-plus"></i> 新增产品</span>
            </li>`;
          product.appendChild(el);
          // 新增按钮点击事件
          el.onclick = () => {
            this.addItem(null);
          };
        }
      }
    },
    editItem(item) {
      // 本地编辑
      this.addItem(item.value);
    },
    deleteItem(item) {
      this.$confirm("确定要删除" + "' " + item.label + " '" + "吗?", "删除", {
        type: "warning",
      })
        .then(() => {
          // 本地静态删除
          this.options = this.options.filter((e) => e.value != item.value);
        })
        .catch(() => {});
    },
    // 添加产品
    addItem(val) {
      if (val && val != null) {
        // 编辑修改
        let index = this.options.findIndex((e) => e.value == val);
        let obj = this.options[index];
        this.$prompt(this.$t("请输入新的产品信息"), "编辑", {
          confirmButtonText: this.$t("tagsView.ensure"),
          cancelButtonText: this.$t("tagsView.cancel"),
          inputValue: obj.label,
        }).then(async ({ value }) => {
          if (!value || value == "") {
            this.$message({
              type: "error",
              message: "产品信息不能为空!",
            });
          } else {
            let index = this.options.findIndex((e) => e.value == val);
            this.options[index].label = value;
          }
        });
      } else {
        // 新增
        this.$prompt(this.$t("请输入新的产品信息"), "提示", {
          confirmButtonText: this.$t("tagsView.ensure"),
          cancelButtonText: this.$t("tagsView.cancel"),
        }).then(async ({ value }) => {
          // 提交内容为空时提示
          if (!value || value == "") {
            this.$message({
              type: "error",
              message: "产品信息不能为空!",
            });
          } else {
            // 本地静态新增,正常使用可以调接口新增
            let obj = {
              value: this.options[this.options.length - 1].value + 1,
              label: value,
            };
            this.options.push(obj);
          }
        });
      }
    },
  },
};
</script>

<style lang="scss" scoped>
.select {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  .form {
    padding-top: 100px;
    width: 500px;
  }
}
</style>

新增:

1、在下拉框显示的时候,会触发生成新增按钮标签事件;

@visible-change="(v) => visibleChange(v, 'template')"

2、点击新增按钮会弹出可输入弹框 ,确定后会提交内容

// 新增
        this.$prompt(this.$t("请输入新的产品信息"), "新增", {
          confirmButtonText: this.$t("tagsView.ensure"),
          cancelButtonText: this.$t("tagsView.cancel"),
        }).then(async ({ value }) => {
          // 提交内容为空时提示
          if (!value || value == "") {
            this.$message({
              type: "error",
              message: "产品信息不能为空!",
            });
          } else {
            // 本地静态新增,正常使用可以调接口新增
            let obj = {
              value: this.options[this.options.length - 1].value + 1,
              label: value,
            };
            this.options.push(obj);
          }
        });

编辑:

1、编辑按钮和删除按钮都是写在下拉框内容里,设置了向右浮动

2、点击编辑时获取点击的那一列数据,然后修改

if (val && val != null) {
        // 编辑修改
        // 获取要修改的部分
        let index = this.options.findIndex((e) => e.value == val);
        let obj = this.options[index];
        this.$prompt(this.$t("请输入新的产品信息"), "编辑", {
          confirmButtonText: this.$t("tagsView.ensure"),
          cancelButtonText: this.$t("tagsView.cancel"),
        // 输入框里显示的内容
          inputValue: obj.label,
        }).then(async ({ value }) => {
          if (!value || value == "") {
            this.$message({
              type: "error",
              message: "产品信息不能为空!",
            });
          } else {
            let index = this.options.findIndex((e) => e.value == val);
            this.options[index].label = value;
          }
        });
      } 

删除:

至于删除就是获取到要操作的那一列数据,删除即可

查询:

查询就更简单了,直接在el-select标签中设置 filterable属性即可;如果想要更复杂的远程搜索效果,请移步element-ui官网

https://element.eleme.cn/#/zh-CN/component/select

el-select回显多选数据(下拉里有一级数据,也有二级数据) el-select回显多选数据(下拉只有一级数据,也有二级数据) 阅读详情

相关推荐

下拉框添加删除按钮

下拉框添加删除按钮,虽然比不上qq下拉列表。但是也值得借鉴

elementui 一个选择框根据另一个选择框所选内容的改变而改变,但是选择后原数据没有清除的问题

先说问题。 我们项目中时常会写一些选项之间相互联系的内容,如下 根据上部用户属性的选择值不同,下面的显示内容也会根据选择值来变化,这里使用v-if来判断下面要做什么样的显示就不多再赘述。 但是由于这里可能会形成多个这样的小框,如下 所以这里要对数据进行循环操作来展示,所以form在绑定时不能简单使用一个对象来绑定了,而是使用了一个数组来不断往里添加或者删除来实现。数据结构: arr: [ { id: '', province: [],

在车上在路上的博客 6056

element-ui select框改造加入添加和删除功能

大概要做成这样 废话不说直接贴代码。还有css 把新增框固定在下。

2301_77079844的博客 2410

Element UI form表单及select下拉实现动态添加和删除

结合antv x6 流程图,实现需求,每个流程图节点均可设置当前节点对应审批部门和用户,部门会签节点可设置多部门多用户,动态添加部门及用户。当前节点已配置人员部门可回显,当前节点已配置人员删除,回显为空。需求为可动态选择用户及部门,并具备回显功能。

Apricity_F的博客 3106

element-ui的el-select把读取到的数据放入下拉菜单

el-select遍历选项加入下拉菜单

TDSSS的博客 2275

vue.js使用心得——el-selectel-table数据处理,css样式穿透以及增删改查

    这个假期接触了网页前端的又一个利器,vue.js,它的主要特点在于对数据的双向绑定。想想之前用最原始的js的时候,我们更改页面上的数据,经常会用到InnerHTML,getElementById的代码,它实际上是在对DOM元素进行添加或修改,包括jQuery,也是通过查找页面源代码中的DOM标签,达到了动态效果的实现,当我们确定要对页面上某一元素进行修改的时候,会用id或name 进行元素...

梅斯温杜的学徒 7万+

el-select中每个option加删除按钮并且可点击

el-select中每个option加删除按钮并且可点击

wangyuntuan的专栏 4339

element-ui通过点击按钮向表格中添加对应的内容

点击编辑时,携带点击项的id跳到编辑页面,显示该任务id里面已经包含的动作。点击新建/编辑任务跳转到一个页面,在页面中对动作内容进行增删改。点击新建时,跳转到的页面为。

weixin_62462734的博客 1294

Vue 中清空 el-select 选项的方法

这样,当用户点击“清空”按钮时,el-select的选中项就会被清空。请注意,以上示例是基于Vue.js框架的,如果你的项目环境有所不同,请根据实际情况调整。3、触发清空操作:通过按钮或其他交互元素调用clearSelection方法来清空el-select的选中项。2、定义方法清空绑定的值:在Vue实例的methods中定义一个方法来清空这个绑定的值。1、绑定值:首先确保你的el- <template>

宽带你的世界 5569

vue+el-select下拉实现:全选、反选、清空功能

2、为el-select绑定change事件和remove-tag事件,具体实现全选功能写在事件中。el-select下拉框要求实现全选功能。1、给el-select增加【全选】【清空】【反选】按钮

askuld的博客 1万+

LabVIEW下拉列表和枚举控件

如需将枚举输入控件与枚举显示控件相连接,显示控件和输入控件中的项必须相互匹配。下拉列表控件可配置为允许用户在为下拉列表控件所定义的项列表中输入与记录不相关的数值。要在运行时向下拉列表控件输入未定义值,单击该控件,在快捷菜单中选择,在出现的数字显示框中输入数值,然后按键。将枚举型控件连接至条件结构的选择器接线端时,LabVIEW将控件中的字符串与分支条件相比较,而不是控件的数值。位于下拉列表和枚举及经典下拉列表和枚举选板上的下拉列表和枚举控件可用来创建可循环浏览的字符串列表。

bjcyck的博客 4641

Element el-select 选择框选中后可删除

<template> <el-select ref="searchSelect" v-model="value" filterable placeholder="请选择" @visible-change="handleChange" @focus="selectFocus" @blur="(ev)=>{value = ev.target.value}"> <el-option v-for="item in options" :k...

qq_38552198的博客 3997

el-select 添加删除选项

clearable 是否可以清空选项 boolean — false <el-select v-model="formPersonnel.imkefugropuid" placeholder="请选择" :clearable="true"> <el-option v-for="item in options" :key="item...

sunlizhen的专栏 4424

el-select可以新建条目时 限制输入字数

以上,第一次加载的表格数据 科目的下拉框输入有限制。但是,如果点击导入,表格中新增的数据的科目下拉框是没有输入限制的,需要强制刷新此页面。一.el-select新建条目需要设置allow-create和filterable。以上,各种情况下,el-select可创建条目的输入限制字数的功能均已实现。3.el-table中,而且通过某个操作表格中的数据会新增。②provide / inject声明注入法。2.el-select在动态加载的组件中。1.页面中仅有一个el-select

qq_37899622的博客 3957

Element Ui 实现 Select选择器 新增或删除下拉选择框功能

需求描述: 点击按钮新增一个Select 选择器,在每个新增的选择器下拉框后面都有删除按钮,并且最后一个下拉框后还有新增按钮。 <div> <div style="margin-bottom: 8px">选择区域</div> <el-button v-if="!buildings.length" type="link" @click="handleAdd"> 新增区域 </el-button> <el-fo..

KangMino的博客 5195

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

【代码】<el-select> 在下拉选项框中添加一个按钮实现子选项的添加。

tyjlearning的博客 2600

google浏览器全黑

删除C:\Users\你\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache

Richad的博客 929

el-select多选multiple数据无法删除,回显成功,但无法编辑,选中和删除都没反应

回显的数据是从后台接口得来,由于数据层次太多,导致render函数没有自动更新;使用 @change = “$forceUpdate()” 强制刷新视图。

浮游的博客 2565

el-select增加全选选项

【代码】el-select增加全选选项。

Y_seaboy的博客 628
上一篇: 香港地图d3.js实现(附JSON数据)
下一篇: Vue 2 和 Vue 3 的响应式原理
前端罗小黑
博客等级 码龄4年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值