前车之鉴: 适用于所有select选择框的 全选反选逻辑,如何只用单个change事件优雅完成

文章目录

    • 实际效果
      • 1.1 效果展示
      • 1.2 核心功能
    • Show Code
    • Q & A
    • 彩蛋

实际效果

1.1 效果展示

在这里插入图片描述

1.2 核心功能

  1. 区别网上其他思路,我这里不需要使用原生点击事件,将全选反选逻辑收敛在一个change事件上

此前已经看过一些全选逻辑同学尝试过后,会发现大部分是将全选的option单独定制,然后添加事件,确实可以实现目的,但是存在两个问题
A1: 全选逻辑和反选逻辑分开维护,方法太多维护成本高,不易debug
A2:自定义了全选事件需要使用原生@click.native事件,有些平台需要2次点击才能进行标签移除,交互体验就牺牲了

2. 全选选中,其他都选中,全选不选中,其他都不选
3. 除了全选都选中,则全选选中
4. 对于已经全选的标签,移除一个,全选自动移除

5. 提供调试思路、丰富的注释【热衷分享~~】


Show Code

<el-form-item label="上游服务节点:" prop="gray_server_hosts"><el-select v-model="currentSelectedInstanceList" @change="selfAdaptInstanceSelectAllEvent"placeholder="请选择" multiple :disabled="isEdit"><!-- <el-option  @click.native="handleSelectAll(chooseAllValue)" :label='chooseAllValue' :key="chooseAllValue" :value="chooseAllValue"></el-option> --><el-option v-for="item in instanceObjectArray" :key="item.value" :label="item.label"  :value="item.value" /></el-select>
</el-form-item>
export default {name: "FlowSwitchManage",data() {// 动态数据,一般是对象数组instanceObjectArray: [],// 当前选中的数据,一般情况是普通数组currentSelectedInstanceList: [],// 非响应的数据,用于保留上一次选中数据情况preSelectOptions:[],// 给全选打标记,1 代表全选choose_all: 0,chooseAllValue: '全选',},methods:{selfAdaptInstanceSelectAllEvent(current) {console.log("自动响应", current, this.choose_all, this.currentSelectedInstanceList, this.instanceObjectArray)// 1.如果之前没有全选//  1.1 现在有全选,全部选上//  1.2 现在没有全选,但是数量和列表一致,全选选上// 2.如果之前有全选 //  2.1 现在还有全选,则移除的是普通选项,则一并移除全选//  2.2 移除的是全选,则清空if (!this.preSelectOptions.includes(this.chooseAllValue)) {if ((!current.includes(this.chooseAllValue) && current.length === this.instanceObjectArray.length - 1) || current.includes(this.chooseAllValue)) {this.choose_all = 1this.currentSelectedInstanceList = [...this.instanceObjectArray.map(option => option.value)]} } else if (current.includes(this.chooseAllValue) ) {this.choose_all = 0this.currentSelectedInstanceList = this.currentSelectedInstanceList.filter(val => val !== this.chooseAllValue)} else if (!current.includes(this.chooseAllValue)) {this.choose_all = 0this.currentSelectedInstanceList = []}this.preSelectOptions = this.currentSelectedInstanceList},},watch: {// 'currentSelectedInstanceList' (newVal, oldVal) {//   console.log('监听instance变化', oldVal, '--->', newVal)//   this.selfAdaptInstanceSelectAllEvent()// } 两个方式都对// currentSelectedInstanceList: {//   handler(newVal, oldVal) {//     console.log('监听instance变化', oldVal, '--->', newVal)//     this.selfAdaptInstanceSelectAllEvent()//   },//   deep: true// }}  
}

Q & A

作为一名后端童鞋, 根据自己的踩坑经验总结得出该设计,也借鉴不少设计,基本的注释都有,通过详细的字段名应该比较清晰,这里在回答几个问题

1、preSelectOptions 的作用在于vue是响应式的,只要你对组件变更会立刻更新mode绑定的数据,这是为什么和网上其他思路不一样,只使用一个方法解决的核心所在,如果不保存上一次的快照数据那么是无法做到用1个方法处理
2. current 和 model绑定的模型currentSelectedInstanceList数据其实一样的,这里是el组件提供方便操作而已
3. choose_all 存在的价值在于你的业务是否需要精细化控制,一般场景可以忽略


彩蛋

如果使用蚂蚁的antd-design-vue框架,a-select如何使用

data和method 不用改变,直接迁移,html使用如下即可

<a-select style="width:200px"  :options="instanceObjectArray" v-model="currentSelectedInstanceList" @change="selfAdaptInstanceSelectAllEvent" placeholder="请选择" mode="multiple"/>

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

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

相关文章

Re54:读论文 How Context Affects Language Models‘ Factual Predictions

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;How Context Affects Language Models’ Factual Predictions ArXiv网址&#xff1a;https://arxiv.org/abs/2005.04611 2020年AKBC论文&#xff0c;作者来自脸书和UCL。 本文主要关注…

C语言--每日选择题--Day24

第一题 1. 在C语言中&#xff0c;非法的八进制是&#xff08; &#xff09; A&#xff1a;018 B&#xff1a;016 C&#xff1a;017 D&#xff1a;0257 答案及解析 A 八进制是0&#xff5e;7的数字&#xff0c;所以A错误 第二题 2. fun((exp1,exp2),(exp3,exp4,exp5))有几…

vcsa6.7打补丁操作

首先到官网中查找到最新的patch&#xff0c;需要有注册账号才可操作 网址链接&#xff1a;https://customerconnect.vmware.com/patch#search 下载后把iso文件上传到磁盘中&#xff0c;vcsa虚拟机中做光盘iso挂接后&#xff0c; 使用浏览器输入https://ip:5480登录&#xff…

ElasticSearch查询语法及深度分页问题

一、ES高级查询Query DSL ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL&#xff08;Domain Specified Language 领域专用语言&#xff09; , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互&#xff0c;这种方式的丰富查询语法…

P9206 不死「徐福时空」

这个题其实几乎就是个模拟题,怎么实现希尔排序的思路已经告诉你了,你就按部就班的实现即可 最值得注意的是,这个代价的计算,这个代价是两点间距离 / d 1,题目中给的有点精简了,不过这个题确实就这个点值得思考,其他的对着思路打就行 以下是AC代码 #include<bits/stdc.h>…

flink的异常concurrent.TimeoutException: Heartbeat of TaskManager with id的解决

背景 在使用flink进行集成测试时&#xff0c;我们会使用MiniClusterWithClientResource类&#xff0c;但是当我们断点导致在某个方法执行的时间比较长时&#xff0c;会有错误发生&#xff0c;那么该如何解决这个错误呢&#xff1f; 处理concurrent.TimeoutException: Heartbe…

vivo开发者链接

开发平台 vivo开放平台 这里注册的是都企业账号&#xff0c;要上传企业信息。 开发者社区 vivo开发者社区 这里才能个人开发账号。

@ResponseBody详解

ResponseBody() 作用&#xff1a; responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后&#xff0c;写入到response对象的body区&#xff0c;通常用来返回JSON数据或者是XML数据。 位置&#xff1a; ResponseBody是作用在方法上的&…

Docker 运行 Oracle Autonomous Database Free Container

​ Docker 运行 Oracle Autonomous Database Free Container Oracle Autonomous Database Free Container Image 介绍通过 Docker 运行 Oracle Autonomous Database Free ContainerWallet 配置可用的 TNS 别名MY_ATP TNS 别名MY_ADW TNS 别名连接到 Oracle Autonomous Databas…

C++类与对象(上)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&am…

谨防利用Redis未授权访问漏洞入侵服务器

说明&#xff1a; Redis是一个开源的&#xff0c;由C语言编写的高性能NoSQL数据库&#xff0c;因其高性能、可扩展、兼容性强&#xff0c;被各大小互联网公司或个人作为内存型存储组件使用。 但是其中有小部分公司或个人开发者&#xff0c;为了方便调试或忽略了安全风险&#…

数据结构—小堆的实现

前言&#xff1a;前面我们已经学习了二叉树&#xff0c;今天我们来学习堆&#xff0c;堆也是一个二叉树&#xff0c;堆有大堆有小堆&#xff0c;大堆父节点大于子节点&#xff0c;小堆父节点总小于子节点&#xff0c;我们在学习C语言的时候也有一个堆的概念&#xff0c;那个堆是…

力扣:判断回文串(JavaScript)

力扣&#xff1a;判断回文串&#xff08;JavaScript&#xff09; 题目解法一&#xff1a;单层for循环解法二&#xff1a;while循环解法三&#xff1a;forpush解法四&#xff1a;递归 题目 判断一个字符串是否是回文串&#xff0c;比如&#xff1a;12321、3443、8338、83438都是…

通过互联网代理部署Docker+Kubernetes 1.28.1

一、背景 在公司环境中&#xff0c;我们往往都是无法直接连接外网的&#xff0c;之前写过一篇文章&#xff0c;是通过外网自建的中转机器下载需要的离线包&#xff0c;并在内网搭建一个harbor&#xff0c;通过harbor的方式搭建了一个kubernetes&#xff0c;但是这种方式还是有…

医学检验科LIS系统源码 样本采集、检验、分析

LIS把检验、检疫、放免、细菌微生物及科研使用的各类分析仪器&#xff0c;通过计算机联网&#xff0c;实现各类仪器数据结果的实时自动接收、自动控制及综合分析&#xff1b;系统可与条码设备配套使用&#xff0c;自动生成条码&#xff0c;减少实验室信息传递中人为因素导致的误…

鸿蒙开发-ArkTS 语言-基础语法

1. 初识 ArkTS 语言 ArkTS 是 HarmonyOS 优选主力开发语言。ArkTS 是基于 TypeScript (TS) 扩展的一门语言&#xff0c;继承了 TS 的所有特性&#xff0c;是TS的超集。 主要是扩展了以下几个方面&#xff1a; 声明式UI描述和自定义组件&#xff1a; ArkTS使用声明式的方式描述用…

03 七种基本的 C++ 数据类型以及枚举类型

系列文章目录 03 七种基本的 C 数据类型以及枚举类型 目录 系列文章目录 文章目录 前言 1.基本数据类型介绍 2.带符号的数据类型 二、C中的枚举类型 总结 前言 C中的数据类型指的是变量或常量能够存储的数据类型。它在c中有很重要的作用&#xff0c;比如&#xff1a; …

力扣labuladong——一刷day52

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣894. 所有可能的真二叉树二、力扣998. 最大二叉树 II三、力扣1110. 删点成林 前言 二叉树的递归分为「遍历」和「分解问题」两种思维模式&#xff0c;这…

android BSP 开发总结之四

1.设置状态栏的显示或隐藏 frameworks/base 路劲下面有个services/core/java/com/android/server/wm/DisplayPolicy.java, 该文件中有一个”mHasNavigationBar” , 设置为false则隐藏&#xff0c;否则显示。 String navBarOverride "1"; if ("1".equals(…

MySQL-03-索引

索引是提高MySQL查询性能的一个重要途径&#xff0c;但过多的索引可能会导致过高的磁盘使用率以及过高的内存占用&#xff0c;从而影响应用程序的整体性能。应当尽量避免事后才想起添加索引&#xff0c;因为事后可能需要监控大量的SQL才能定位到问题所在&#xff0c;而且添加索…