当前位置: 首页 > ai >正文

el-select如何获取到filterable过滤后的数据;el-select全选与filterable过滤组合使用;

文章目录

    • 一、问题
    • 二、解决方案


一、问题

提示:el-select的filterable单独过滤筛选使用正常;全选按钮单独使用也正常;但是两者结合使用的时候先过滤再全选会导致数据不正常
目标:过滤后的全选希望值增加所过滤的所有相,但是实际会将整体下拉项都选中

二、解决方案

自定义filter-method过滤事件与状态判断修改
在这里插入图片描述
封装组件MySelectAll.vue

<template><div><!-- <div>{{ checkAll }}-{{ indeterminate }}-{{ flterMsg }}-{{ values }}</div> --><el-select @blur="blurFun" v-model="values" :filter-method="handleFilter" multiple collapse-tags clearable filterable style="width: 100%" @change="handleCheck"><template #header><el-checkbox v-model="checkAll" :indeterminate="indeterminate" @change="handleCheckAll">全部</el-checkbox></template><el-option v-for="item in filteredOptions" :key="item" :label="item.name" :value="item.value" /></el-select></div>
</template><script setup>
import { ref, watch, onMounted } from "vue"
const emit = defineEmits(["update:modelValue"])
const props = defineProps({// 传入查询关键字options: {type: Array,default: () => []},modelValue: {// 父组件 v-model 时数据没有指定参数名,所以此时属性modelValue会接收到v-model变量 即 flag1type: Array,default: () => []}
})let list = ref(props.options || [])
let filteredOptions = ref(props.options || [])
let values = ref(props.modelValue || [])const checkAll = ref(false)
const indeterminate = ref(false)
let flterMsg = ref(undefined)watch([() => values.value, () => flterMsg.value],([val, msg]) => {// 需要监听过滤字段 也触发对用状态判断效果let a = 1if (a === 2) {console.log(msg)}if (val == null || val == undefined) {checkAll.value = falseindeterminate.value = false} else {if (val.length === 0) {checkAll.value = falseindeterminate.value = false} else {let hasAllSon = filteredOptions.value.every(ele => val.includes(ele.value))let hasNoAllSon = filteredOptions.value.every(ele => !val.includes(ele.value))if (hasNoAllSon) {checkAll.value = falseindeterminate.value = false} else if (hasAllSon) {checkAll.value = trueindeterminate.value = false} else {checkAll.value = trueindeterminate.value = true}}}},{ deep: true, immediate: true }
)
watch(() => props.options,val => {list.value = valfilteredOptions.value = val},{ deep: true, immediate: true }
)
const handleFilter = msg => {flterMsg.value = msgfilteredOptions.value = list.value.filter(item => item.name.includes(msg))
}
const blurFun = () => {console.log(1)flterMsg.value = undefined
}
const handleCheckAll = val => {console.log(val)indeterminate.value = falseif (val) {let arr = JSON.parse(JSON.stringify(values.value))let arr2 = filteredOptions.value.map(_ => _.value)values.value = [...new Set([...arr, ...arr2])]} else {let arr = JSON.parse(JSON.stringify(values.value))let arr2 = filteredOptions.value.map(_ => _.value)values.value = arr.filter(_ => !arr2.includes(_))}emit("update:modelValue", values.value)
}
const handleCheck = () => {emit("update:modelValue", values.value)
}
// 生命周期
onMounted(() => {})
</script>
<style lang="scss" scoped></style>

使用组件

<MySelectAll v-model="networkNameList" :options="networkNameArr" placeholder="请选择网络名称"></MySelectAll>// networkNameList为双下个绑定选择值
// options为下拉数据
http://www.xdnf.cn/news/17686.html

相关文章:

  • Python 中使用多进程编程的“三两”问题
  • Gradle(三)创建一个 SpringBoot 项目
  • vue修改element的css属性
  • 8.13打卡 DAY 41 简单CNN
  • Android实现Glide/Coil样式图/视频加载框架,Kotlin
  • 前后端分离项目在云服务器的部署
  • vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
  • 通过限制网络访问来降低服务器被攻击风险的方法
  • Python uv的使用和配置
  • 《深入解析C++中的Map容器:键值对存储的终极指南》
  • Tigshop 跨境多语言多货币 JAVA / PHP 版本重磅更新v5.0.0发布
  • 友思特方案 | FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效
  • iscc2025区域赛wp
  • 下一代防火墙--NGAF
  • [Oracle数据库] Oracle的表维护
  • [系统架构]信息安全技术基础知识(三)
  • 101 201写完刷卡提示61是什么意思?
  • 数字货币的去中心化:重构价值交换的底层逻辑​
  • 使用 HTML5 Canvas 打造炫酷的数字时钟动画
  • 【从零开始java学习|第五篇】项目、模块、包、类的概念与联系
  • windows通过共享网络上网
  • 【LeetCode】4. 寻找两个正序数组的中位数
  • 教育元宇宙:一场重构教育生态的数字革命
  • 软件架构重构:从混沌到有序的系统性演进
  • Pycharm选好的env有包,但是IDE环境显示无包
  • Avalon-MM协议
  • MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
  • React常见的Hooks
  • 华为认证的HCIE是永久的吗?
  • 使用TexLive与VScode排版论文