当前位置: 代码网 > it编程>编程语言>Javascript > Vue3+Ant design 实现Select下拉框一键全选/清空功能

Vue3+Ant design 实现Select下拉框一键全选/清空功能

2024年06月11日 Javascript 我要评论
最近在做后台管理系统项目的时候,产品增加了一个让人非常苦恼的需求,让在select选择器中添加一键全选和清空的功能,刚开始听到的时候真是很懵,他又不让在外部增加按钮,其实如果说在外部增加按钮实现全选或

最近在做后台管理系统项目的时候,产品增加了一个让人非常苦恼的需求,让在select选择器中添加一键全选和清空的功能,刚开始听到的时候真是很懵,他又不让在外部增加按钮,其实如果说在外部增加按钮实现全选或者清空的话,功能相对来说还是比较简单的。咱也是没办法啊公司的牛马,只能按照需求来修改了。好在通过查找了资料自己又进行了总结之后,实现了让人恼火的需求,因为在查找资料的时候发现对于这一块的知识点,网上的还是少之又少的,基本上都是vue2的方式,所以咱既然已经实现了,就分享给大家一起共享咯。

一、搭建页面

在项目中安装和引用ant design组件这里就不在细说了,前面的很多案例中都有讲解这一块,不会的小伙伴可以进行查看即可,当然去ant design官网也有这些操作哦。

<template>
    <div class="test">
        <a-form-item label="营运单位" style="width: 16vw; margin: 15px">
          <a-select
            mode="multiple"
            :max-tag-count="1"
            allowclear
            v-model:value="valueglc"
            @change="changeunit"
            :options="optionsglc"
          >
            <template #maxtagplaceholder="omittedvalues">
              <span class="allselsct" v-if="optionsglc.length === omittedvalues.length + 1">全选</span>
              <span v-else>+ {{ omittedvalues.length }} ...</span>
            </template>
            <!-- 全选---这里就是实现一键全选和清空的细节操作 -->
            <template #dropdownrender="{ menunode: menu }">
              <v-nodes :vnodes="menu" />
              <a-divider style="margin: 4px 0" />
              <div style="padding: 4px 8px; margin-left: 50px; cursor: pointer" @mousedown="e => e.preventdefault()">
                <a-button type="link" @click="selectall">全选</a-button>
                <a-button type="link" @click="clearall">清空</a-button>
              </div>
            </template>
          </a-select>
        </a-form-item>
    </div>
</template>
<script setup>
//所选择的营运单位
const valueglc=ref('')
//营运单位选项列表
const optionsglc=ref([])
//下拉菜单组件不可少,不然后续不显示菜单
const vnodes = (_, { attrs }) => {
  return attrs.vnodes
}
//选择营运单位事件
const changeunit=()=>{}
// 一键全选
const selectall=()=>{}
// 一键清空
const clearall=()=>{}
</script>
<style lang='less' scoped>
.test{}
</style>

二、获取select菜单中的数据

提示: 在这里获取数据是使用了公司封装后的框架

<script setup>
//来源于封装后的数据地址--仅供参考
import { selectorroaddeptlists } from '@/api/tjfx.js'
//所选择的营运单位
const valueglc=ref('')
//营运单位选项列表
const optionsglc=ref([])
//下拉菜单组件不可少,不然后续不显示菜单
const vnodes = (_, { attrs }) => {
  return attrs.vnodes
}
//选择营运单位事件
const changeunit=()=>{}
// 一键全选
const selectall=()=>{}
// 一键清空
const clearall=()=>{}
// 获取下拉框数据-营运单位
const getoptionsglc = () => {
  return new promise((resolve, reject) => {
    selectorroaddeptlists()
      .then(res => {
        if (res.code === 200 && res.data) {
          res.data.foreach((item, index) => {
            optionsglc.value.push({
              value: item.code,
              code: item.code,
              label: item.name
            })
            valueglc.value.push(item.code)
          })
        }
      })
  })
}
onmounted(() => {
    getoptionsglc()
})

三、一键全选

在操作完以上的步骤后,select中已经有对应的数据了,但是最重要的步骤还未实施,下面是实现一键全选的代码

// 一键全选
const selectall=()=>{
    valueglc.value = optionsglc.value.map(option => option.value)
}

四、一键清空

// 一键清空
const clearall=()=>{
    valueglc.value = []
}

五、详细代码

以上就是实现一键全选和一键清空的详细步骤啦,没看懂的小伙伴最后附上全部代码

<template>
    <div class="test">
        <a-form-item label="营运单位" style="width: 16vw; margin: 15px">
          <a-select
            mode="multiple"
            :max-tag-count="1"
            allowclear
            v-model:value="valueglc"
            @change="changeunit"
            :options="optionsglc"
          >
            <template #maxtagplaceholder="omittedvalues">
              <span class="allselsct" v-if="optionsglc.length === omittedvalues.length + 1">全选</span>
              <span v-else>+ {{ omittedvalues.length }} ...</span>
            </template>
            <!-- 全选---这里就是实现一键全选和清空的细节操作 -->
            <template #dropdownrender="{ menunode: menu }">
              <v-nodes :vnodes="menu" />
              <a-divider style="margin: 4px 0" />
              <div style="padding: 4px 8px; margin-left: 50px; cursor: pointer" @mousedown="e => e.preventdefault()">
                <a-button type="link" @click="selectall">全选</a-button>
                <a-button type="link" @click="clearall">清空</a-button>
              </div>
            </template>
          </a-select>
        </a-form-item>
    </div>
</template>
<script setup>
import { selectorroaddeptlists } from '@/api/tjfx.js'
//所选择的营运单位
const valueglc=ref('')
//营运单位选项列表
const optionsglc=ref([])
//下拉菜单组件不可少,不然后续不显示菜单
const vnodes = (_, { attrs }) => {
  return attrs.vnodes
}
//选择营运单位事件
const changeunit=()=>{}
// 一键全选
const selectall=()=>{
    valueglc.value = optionsglc.value.map(option => option.value)
}
// 一键清空
const clearall=()=>{
    valueglc.value = []
}
// 获取下拉框数据-营运单位
const getoptionsglc = () => {
  return new promise((resolve, reject) => {
    selectorroaddeptlists()
      .then(res => {
        if (res.code === 200 && res.data) {
          res.data.foreach((item, index) => {
            optionsglc.value.push({
              value: item.code,
              code: item.code,
              label: item.name
            })
            valueglc.value.push(item.code)
          })
        }
      })
  })
}
onmounted(() => {
    getoptionsglc()
})
</script>
<style lang='less' scoped>
.test{}
</style>

到此这篇关于vue3+ant design 实现select下拉框一键全选/清空的文章就介绍到这了,更多相关vue3 ant design下拉框全选内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com