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

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.dtcms.com/a/329294.html

相关文章:

  • (30)python+playwright自动化测试处理日历时间控件-下
  • 解决H616编译路径问题
  • 第一章 OkHttp 是怎么发出一个请求的?——整体流程概览
  • dp+e2e论文词汇积累自查
  • Microsoft Whiteboard功能深度解析:企业协作与创意管理的智能画布
  • ce找基地址简单版
  • 如何准备一场技术演讲
  • Unity新手制作跑酷小游戏详细教程攻略
  • C语言相关简单数据结构:顺序表
  • 【QT】QT实现鼠标左右滑动切换图片
  • 云下的rocketMq切换为阿里云RocketMq报错:No route info of this topic
  • sensor的成像波长和量子效应
  • 全面深入-JVM虚拟机
  • 多语言文本 AI 情感分析 API 数据接口
  • scikit-learn/sklearn学习|岭回归linear_model.Ridge()函数解读
  • 蓝桥杯备赛 按键、LCD、定时器
  • 变分自编码器VAE的Pytorch实现
  • 兰洋科技获第四届宁波市专利创新大赛殊荣,以液冷技术定义行业新标杆
  • 磁悬浮轴承转子动平衡:零接触旋转下的“隐形杀手”深度解析与精准猎杀指南
  • Java项目中地图功能如何创建
  • 使用 libpq 的 COPY 协议维护自定义 PG 到 PG 连接
  • 飞算JavaAI的中间件风暴:Redis + Kafka 全链路实战
  • WMware的安装以及Ubuntu22的安装
  • 自动驾驶中安全相关机器学习功能的可靠性定义方法
  • VirtualBox中的Ubuntu共享Windows的文件夹
  • 【Excel】被保护的文档如何显示隐藏的行或列
  • 厚铜PCB在百安级电流与高温环境中的关键作用
  • 普通电脑与云电脑的区别有哪些?全面科普
  • C++ 错误记录模块实现与解析
  • Redis:是什么、能做什么?