vue——下拉选择框新增全选选项

下拉选择框新增全选选项

elementUI原本组件

elementUI原本组件是没有全选这个选项的在这里插入图片描述

实现效果

我们要实现的就是把全选选项给它加上
在这里插入图片描述

实现代码

<template>
  <el-select
    v-model="selectValue"
    collapse-tags
    multiple
    placeholder="请选择"
    @change="selectAll"
  >
    <el-option
      v-for="(item, index) in options"
      :key="index"
      :label="item.label"
      :value="item.value"
    />
  </el-select>
</template>

<script>
export default {
  name: 'Select',
  data() {
    return {
      options: [
          {
            value: 'ALL_SELECT',
            label: '全选'
          },
          {
            value: 0,
            label: '选项一'
          },
          {
            value: 1,
            label: '选项二'
          },
          {
            value: 2,
            label: '选项三'
          }
        ],
      selectValue: [],
      oldOptions: []
    }
  },
  methods: {
    selectAll(val) {
      const allValues = []
      // 保留所有值
      for (const item of this.options) {
        allValues.push(item.value)
      }
      // 用来储存上一次的值,可以进行对比
      const oldVal = this.oldOptions.length === 1 ? this.oldOptions[0] : []
      // 若是全部选择
      if (val.includes('ALL_SELECT')) this.selectValue = allValues
      // 取消全部选中 上次有 当前没有 表示取消全选
      if (oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) { this.selectValue = [] }
      // 点击非全部选中 需要排除全部选中 以及 当前点击的选项
      // 新老数据都有全部选中
      if (oldVal.includes('ALL_SELECT') && val.includes('ALL_SELECT')) {
        const index = val.indexOf('ALL_SELECT')
        val.splice(index, 1) // 排除全选选项
        this.selectValue = val
      }
      // 全选未选 但是其他选项全部选上 则全选选上 上次和当前 都没有全选
      if (!oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) {
        if (val.length === allValues.length - 1) { this.selectValue = ['ALL_SELECT'].concat(val) }
      }
      // 储存当前最后的结果 作为下次的老数据
      this.oldOptions[0] = this.selectValue
    }
  }
}
</script>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
是的,Vue下拉框可以实现下拉选择新增选项的功能。通常可以通过在下拉框添加一个“其他”选项,当用户选择“其他”选项时,弹出一个输入供用户填写新的选项。具体实现方式可以参考以下步骤: 1. 在下拉框选项列表添加一个“其他”选项。 ``` <select v-model="selectedOption"> <option v-for="option in options" :value="option.value">{{ option.label }}</option> <option value="other">其他</option> </select> ``` 2. 监听下拉框的值变化,当选择了“其他”选项时,弹出输入。 ``` <select v-model="selectedOption" @change="onSelectChange"> <option v-for="option in options" :value="option.value">{{ option.label }}</option> <option value="other">其他</option> </select> ... methods: { onSelectChange() { if (this.selectedOption === 'other') { this.showInput = true; } else { this.showInput = false; } } } ``` 3. 根据输入的值,动态添加新的选项。 ``` <select v-model="selectedOption" @change="onSelectChange"> <option v-for="option in options" :value="option.value">{{ option.label }}</option> <option value="other">其他</option> </select> ... <div v-if="showInput"> <input type="text" v-model="newOption" @blur="addNewOption" /> </div> ... methods: { onSelectChange() { if (this.selectedOption === 'other') { this.showInput = true; } else { this.showInput = false; } }, addNewOption() { if (this.newOption.trim() !== '') { const newOption = { label: this.newOption, value: this.newOption }; this.options.push(newOption); this.selectedOption = newOption.value; } this.showInput = false; this.newOption = ''; } } ``` 以上是一个简单的示例,具体实现方式可以根据项目需求进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端技术迷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值