【详解代码】vue element el-select选择器多选下拉框实现全选功能和取消全选

news2024/11/25 17:18:09

目录

  • 解决方法 下拉项增加一个【全部】
    • ⭐️效果图如下:
      • 默认全选
      • 情况一:下拉选项全都勾选时,【全部】自动勾选;
      • 情况二:下拉选项全都未勾选时,点击【全部】后,所有下拉选项全部勾选;
      • 情况三: 取消一项
      • 情况四: 取消全部项
      • 情况五: 取消勾选【全部】项
    • ⭐️详细代码如下:
  • 🚀写在最后

解决方法 下拉项增加一个【全部】

⭐️效果图如下:

默认全选

在这里插入图片描述

情况一:下拉选项全都勾选时,【全部】自动勾选;

情况二:下拉选项全都未勾选时,点击【全部】后,所有下拉选项全部勾选;

在这里插入图片描述

情况三: 取消一项

在这里插入图片描述

情况四: 取消全部项

情况五: 取消勾选【全部】项

在这里插入图片描述

⭐️详细代码如下:

        <div style="width: 20%">
          <span class="width_t">推荐原因:</span>
          <el-select
            v-model="reason"
            multiple
            clearable
            collapse-tags
            placeholder="请选择"
            style="width: 170px;"
            @change="getReason">
            <el-option
              :key="'全部'"
              :label="'全部'"
              :value="'全部'"/>
            <el-option
              v-for="item in reasonOption"
              :key="item.value"
              :label="item.lable"
              :value="item.value"
            />
          </el-select>
        </div>
import { getDictDetailData } from '../../../../api/dvas'
export default {
 data() {
    return {
      reason: '',
      reasonOption: [],
      allReasonFlag: false
       }
    },
mounted() {
// 一开始从这里进
    this.getDictDetail()
  },
  methods: {
    // 推荐原因下拉框接口
    getDictDetail() {
      const that = this
      var par = { dict_id: '51' }
      // getDictDetailData接口名称
      getDictDetailData(par).then(res => {
      // 接口返回的数据存在reasonOption数组中
        that.reasonOption = res.data
        // 将“全部”传到getReason方法里
        that.getReason('全部')
      })
    },
    // allReasonFlag默认为false
 getReason(data) {
 // 当allReasonFlag为true时,进的是if里的。
      if (this.allReasonFlag) {
      // 设置allReasonFlag为false,重置状态
        this.allReasonFlag = false
        // 如果allReasonFlag为true,表示之前已经选择了全部原因,那么如果传入的数据中包含"全部",则将除了"全部"以外的其他原因添加到reason中,也就是取消选择的操作,取消任意选项,如果没有取消勾选"全部"这个选项,就过滤掉"全部“,把已经勾选的除了'全部'剩下的按钮都存在reason里。此时allReasonFlag为false。
        if (data.indexOf('全部') > -1) {//🚀全选之后取消某些选项
          this.reason = data.filter(res => res !== '全部') // indexOf()方法来检查字符串data中是否包含"全部"这个子串。如果包含,indexOf()方法会返回该子串在字符串中的起始位置,如果不包含,indexOf()方法会返回-1。
        } else {//🚀全选之后取消全部选项 
        // 这里是直接取消“全部”这个选项,此时什么都不选,reason为空
          this.reason = []
        }
      } else { // 由于allReasonFlag默认为false,所以一开始进的是else里的。第一种情况:因为上边getDictDetail()里写了 that.getReason('全部'),也就是一开始就把“全部”传进来了。进的是下边if里。第二种情况:点击‘全部’项后,改为全部状态
        if (data.indexOf('全部') > -1) {//🚀选择“全部”选项
         // 如果传入的数据中包含"全部",则将reason设置为包含全部原因和其他所有原因的数组,并且设置allReasonFlag为true。因为在这里设置了allReasonFlag为true,所以下一次操作的时候进的上边的if。
          this.reason = ['全部', ...this.reasonOption.map(res => res.value)]
          this.allReasonFlag = true
        } else {// 否则不包含全部,就是进的这里边,如果传入的数据长度等于原始选项的长度,也就是选了除了“全部”项的其他所有选项,则将reason设置为包含全部原因和其他所有原因的数组,同时将allReasonFlag设置为true
          if (data.length === this.reasonOption.length) {//🚀选择除“全部”外全部选项
            this.reason = ['全部', ...this.reasonOption.map(res => res.value)]
            this.allReasonFlag = true
          } else {//🚀选择某些选项
            this.reason = data// 否则将reason设置为传入的数据。选的某几项就传入几项
          }
        }
      }
    },
  }
}

getReason(data)是一个函数,根据传入的数据来设置一个变量reason的值。根据代码逻辑,如果allReasonFlag为true,表示之前已经选择了全部原因,那么如果传入的数据中包含"全部",则将除了"全部"以外的其他原因添加到reason中;否则将reason置为空数组。如果allReasonFlag为false,表示之前没有选择全部原因,那么如果传入的数据中包含"全部",则将reason设置为包含全部原因和其他所有原因的数组;否则,如果传入的数据长度等于原始选项的长度,则将reason设置为包含全部原因和其他所有原因的数组,同时将allReasonFlag设置为true;否则将reason设置为传入的数据。

🚀写在最后

希望我的分享能够帮助到更多的人,如果觉得我的分享有帮助的话,请大家一键三连支持一下哦~
❤️原创不易,期待你的关注与支持~
点赞👍+收藏⭐️+评论✍️
😊之后我会继续更新前端学习小知识,关注我不迷路~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

V90伺服驱动器实现一键优化的具体方法

V90伺服驱动器实现一键优化的具体方法 目的:解决运行中震动、异响等问题。 前提条件: 使用一键自动优化的前提:  对于带绝对值编码器的电机:位置限制由p29027决定,至少为180  对于带增量式编码器的电机:在开始优化时必须允许电机有2圈的自由旋转,p29027至少为720 使…

Linux挂载新磁盘到服务器新目录-干货分享

确认磁盘 新建分区 输入m查看帮助&#xff1a; 输入n新建分区&#xff0c;输入p建立分区&#xff08;其他默认将全部空间进行分配&#xff09;&#xff1a; 输入w进行保存 lsblk再次确认分配完成后的新分区&#xff1a; 格式化分区 明确文件系统格式&#xff0c;一般有xf…

十四、Jenkins打包完成后,执行python脚本,将发行包打包压缩上传禅道提交版本

十四、Jenkins打包完成后&#xff0c;执行脚本&#xff0c;将版本发行包压缩上传禅道提交禅道版本 十三、禅道登录/提交版本/编辑版本接口 &#xff0c;书接上回&#xff0c;在禅道中注册一个Jenkins账号&#xff0c;利用禅道的接口&#xff0c;提交到禅道中&#xff0c;具体代…

数据仓库系列:StarRocks 入门培训教程

文章目录 1. 什么是StarRocks?1.1. 适用场景1.2. [产品特性](https://docs.starrocks.io/zh-cn/latest/introduction/Features) 2. 系统架构2.1. 系统架构2.1.1. 整体架构2.1.2. 高可用实现方式 2.2. 数据如何管理&#xff1f; 3. 表模型3.1. 明细模型3.2. 聚合模型3.3. 更新模…

冷链NO.1技能,物流人第一天就应该学会!

储藏室的温湿度是许多行业中的关键因素&#xff0c;如医疗、食品、冷链物流等。确保储藏室内的温湿度在规定的范围内是保护物品品质和价值的关键。 储藏室温湿度远程监控是一项重要的任务&#xff0c;特别适用于需要实时掌握储藏室环境条件的场景。通过远程监控&#xff0c;可以…

凸优化理论基础

目录 一&#xff0c;仿射集 1&#xff0c;仿射集(affine set) 2&#xff0c;仿射组合(affine combination) ​编辑 3&#xff0c;仿射包(affine hull) 二&#xff0c;凸集 1&#xff0c;凸集 2&#xff0c;凸组合 3&#xff0c;凸包(convex hull) 本文部分内容来自网友…

JavaEE(系列22) -- IP协议和以太网

目录 1. IP协议 1.1 协议头格式 1.2 解决IPV4地址不够用的问题 1.3 IP地址管理 1.4 路由选择 2. 以太网 (数据链路层) 1. IP协议 P协议是位于OSI模型中第三层(网络层)的协议, 在这层上工作的不止这一个协议, 但IP协议是网络层传输所使用的最主流的一种协议, 有IPv4和IPv6两…

实现旋转切换效果的轮播图。

下面视频是实现后的效果图。具体实现方法可以通过下面链接进行观看 实现旋转切换效果的轮播图。_ღ张明宇࿐的博客-CSDN博客https://blog.csdn.net/zmx781284440/article/details/131466113 旋转切换轮播图

httprunner2.0 概述及使用说明

目录 一、概述 二、系统流程 三、文件组织 1、项目文件目录结构 四、用例编写 1、用例编写 2、编写用例注意事项 五、变量或函数引用 六 环境变量引用 1、编辑.env文件 2、引用环境变量 七、参数化数据驱动 一、概述 HttpRunner是一款面向 HTTP(S) 协议的通用测试…

2023亚马逊云科技中国峰会:如何让AI前景更广阔

今天&#xff0c;2023亚马逊云科技中国峰会的第二天&#xff0c;峰会现场精彩不断绽放&#xff01; 值得关注的是&#xff0c;峰会上&#xff0c;亚马逊云科技大中华区产品总经理陈晓建在《专注创新&#xff0c;摆脱基础架构束缚》主题演讲中提出&#xff0c;云服务是支持数字创…

「UG/NX」BlockUI 树列表(回调函数)

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

如何创建WooCommerce会员网站

Web网站内容货币化的一种非常标准的方法是通过会员社区提供对内容的有限访问。您可以使用 WordPress 的众多付费专区插件之一轻松创建它。有些使用MemberPress或其他顶级 WordPress 会员插件&#xff0c;还有一些使用 WooCommerce。当您想到会员网站时&#xff0c;WooCommerce可…

Tomcat服务器的使用

一。Tomcat的概念 1.服务器 服务器&#xff1a;分为服务器硬件和服务器软件。在硬件服务器&#xff08;其实就是一台计算机&#xff09;上安装了服务器软件&#xff0c;才可以对外提供服务。 1.硬件&#xff1a;通常是指在互联网上具有独立IP的计算机&#xff0c;通常配置比…

u盘刷新系统

1.百度u盘制作将u盘进行刷成系统盘 点击添加系统 确认 关掉即可 到这里就制作完成了&#xff0c;u盘里也有系统了&#xff0c;下一步就是进入电脑的 bios 一般是f8 或者f2 或者esc 看你是什么电脑自己手机百度一下&#xff0c; 当进入u盘系统时候会发现一键刷机工具找不到镜像&…

【前端基础知识】iframe如何实现项目集成?如何防止被XFS?

目录 iframe介绍iframe语法如何实现集成效果如何将自己的网站实现禁止访问 iframe介绍 HTML 内联框架元素 (<iframe>) 表示嵌套的 browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 iframe语法 <iframe src"" name"" width"…

115.使用JS让移动导航工作起来

● 还记得我们之前的移动导航吗&#xff1f;需要手动添加类才能使其生效&#xff0c;现在我们用js来自动实现 const btnNavEl document.querySelector(".btn-mobile-nav"); const headerEl document.querySelector(".header"); btnNavEl.addEventListe…

【滤波】自适应滤波器

%matplotlib inline#format the book import book_format book_format.set_style()简介 到目前为止&#xff0c;我们已经考虑了跟踪与我们的过程模型相关的表现良好的对象的问题。例如&#xff0c;我们可以使用恒速滤波器来跟踪直线运动的物体。只要物体以合理的恒定速度沿直线…

文心一言vs通义千问 之前端文件夹命名

今天心血来潮想试试国内百度和腾讯的AI在解决前端难题–文件命名方面的效果。 如下&#xff1a; 综上&#xff0c;是百度会更贴近一些哈 大伙有什么命名的好工具嘛&#xff1f;

Flutter学习四:Flutter开发基础(六)调试Flutter应用

目录 0 引言 1 调试Flutter应用 1.1 日志与断点 1.1.1 debugger() 声明 1.1.2 print和debugPrint 1.1.3 调试模式、中间模式、发布模式 1.1.4 断点 1.2 调试应用程序层 1.2.1 转储Widgets树 1.2.2 转储渲染树 1.2.3 转储Layer树 1.2.4 转储语义树 1.2.5 调度&…

PyEcharts 学习总结

—— 如何用 pyecharts 绘制一切你想象得到的交互式图表&#xff1f; pyecharts 分为 v0.5.x 和 v1.0.0 两个版本&#xff0c;这篇总结针对新版本。 本文不包含基础例子的演示&#xff0c;主要记录一些细节方面的理解。示例看 gallery.pyecharts.org 一、简介 – Echarts &am…