vue场景 无分页列表条件过滤,子组件多选来自父组件的列表

日常开发中,经常会遇到下面场景:

  1. 页面加载一个无分页列表,同时工具栏设置多个条件可对列表过滤的场景(典型的就是关键字模糊查询)
  2. 父组件传给子组件列表,子组件中需要多选列表多选,选择结果返回父组件

1 无分页列表过滤

思路:无分页列表是最简单的情况,列表直接绑定计算属性即可:

<template><div class="page-container"><el-input v-model="keyword" placeholder="请输入关键字"></el-input><div class="list" v-for="item in filteredList" :key="item.id"><span>{{ item.id }}</span><span>{{ item.name }}  </span><span>{{ item.status }}</span></div></div>
</template><script lang="ts" setup>
const keyword = ref('');
const list = ref([{id:1,name:'张三',status:'正常',},{id:2,name:'李四',status:'正常',}, {id:3,name:'王五',status:'休假',}, {id:4,name:'林六',status:'休假',}, {id:5,name:'徐七',status:'休假',}
]);
const filteredList = computed(()=>{return list.value.filter(item=>item.name.includes(keyword.value))
})</script>
<style lang="scss" scoped>
.page-container {width: 300px;height: 300px;.list{display: flex;span{+span{margin-left:20px;}}}
}
</style>

同理:多条件时,只是修改计算属性中的逻辑运算即可

<template><div class="page-container"><el-input v-model="keyword" placeholder="请输入关键字"></el-input><el-radio-group v-model="status"><el-radio :label="'全部'">全部</el-radio><el-radio :label="'正常'">正常</el-radio><el-radio :label="'休假'">休假</el-radio></el-radio-group><div class="list" v-for="item in filteredList" :key="item.id"><span>{{ item.id }}</span><span>{{ item.name }}  </span><span>{{ item.status }}</span></div></div>
</template><script lang="ts" setup>
const keyword = ref('');
const status=ref('正常')
const list = ref([{id:1,name:'张三',status:'正常',},{id:2,name:'李四',status:'正常',}, {id:3,name:'王五',status:'休假',}, {id:4,name:'林六',status:'休假',}, {id:5,name:'徐七',status:'休假',}, {id:6,name:'徐八',status:'正常',}
]);
const filteredList = computed(()=>{let baseCondition=item=>item.name.includes(keyword.value);let condition=baseCondition;if(status.value!=='全部'){condition=item=>baseCondition(item) && item.status===status.value}return list.value.filter(condition)
})</script>
<style lang="scss" scoped>
.page-container {width: 300px;height: 300px;.list{display: flex;span{+span{margin-left:20px;}}}
}
</style>

2 子组件中多选来自父组件的列表

思路:来自父组件的列表可以认为是无分页列表,先在子组件中复制一份,追加check属性,然后在list中绑定

不正确的处理(修改props)

1 在子组件中给props中的list追加check属性,绑定list

2 在父组件中给list追加check属性,子组件绑定list,这样点击checkbox依然会修改props

 


<template><div class="page-container"><el-input v-model="keyword" placeholder="请输入关键字"></el-input><el-radio-group v-model="status"><el-radio :label="'全部'">全部</el-radio><el-radio :label="'正常'">正常</el-radio><el-radio :label="'休假'">休假</el-radio></el-radio-group><div class="list" v-for="item in filteredList" :key="item.id"><el-checkbox v-model="item.check"> </el-checkbox><span>{{ item.id }} </span><span>{{ item.name }} </span><span>{{ item.status }} </span></div></div>
</template><script lang="ts" setup>
const keyword = ref("");
const status = ref("全部");
const props = defineProps({list: {type: Array,default: () => [{id: 1,name: "张三",status: "正常",},{id: 2,name: "李四",status: "正常",},{id: 3,name: "王五",status: "休假",},{id: 4,name: "林六",status: "休假",},{id: 5,name: "徐七",status: "休假",},{id: 6,name: "徐八",status: "正常",},],},
});const copyList = ref(props.list.map((item) => ({...item,check: false,}))
);const filteredList = computed(()=>{let baseCondition=item=>item.name.includes(keyword.value);let condition=baseCondition;if(status.value!=='全部'){condition=item=>baseCondition(item) && item.status===status.value}return copyList.value.filter(condition)
})watch(filteredList.value, (val, old) => {console.log("val", val.filter((item) => item.check).map((item) => item.id));emit("selectionChange",val.filter((item) => item.check).map((item) => item.id));
});const emit = defineEmits(["selectionChange"]);
</script>
<style lang="scss" scoped>
.page-container {width: 300px;height: 300px;.list {display: flex;.el-checkbox,span {+ span {margin-left: 20px;}}}
}
</style>

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

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

相关文章

Tg5032smn:高稳定性105℃高温

TG5032SMN是一款频率范围10MHz ~ 54MHz,具有高稳定的TCXO晶振&#xff0c;可与CMOS或限幅正弦输出。外部尺寸5.0 3.2 1.45mm&#xff0c;超小型,质地轻。该系列晶振的额定工作范围-40℃~&#xfe62;105C内可高稳定性工作&#xff0c;使得信号频率的误差很小。TG5032SMN与其他…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

Linux的安装及管理程序

一、如何在linux安装卸载软件 1. 编译安装 灵活性较高 难度较大 可以安装较新的版本 2. rpm安装&#xff08;redhat&#xff09; linux 包安装 查软件信息&#xff1a;是否安装&#xff0c;文件列表 rpm 软件名 3. yum yum是RPM升级版本&#xff0c;解决rpm的弊端 安装软件 首…

9.独立看门狗IWDG窗口看门狗WWDG编码思路

前言&#xff1a; 看门狗是维护系统稳定性的一向技术&#xff0c;可以让代码跑飞及时复位&#xff0c;在产品中非常常用&#xff0c;俗话说&#xff0c;重启能解决90%的问题&#xff0c;作为产品来说&#xff0c;你总不能因为一次bug就让程序卡死不动了&#xff0c;肯定要试着重…

WEB 3D技术 three.js 集合体 讲解三角形构建图形 顶点概念 顶点值重用

那么 本文 我们来说一下集合体 我们要创建物体 都要先创建一个集合体 集合体也决定了我们元素的形态 材质 决定了我们的外观 我们结合体 其实基础都是三角形 我们编写如下代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from …

截断整型提升算数转换

文章目录 &#x1f680;前言&#x1f680;截断&#x1f680;整型提升✈️整型提升是怎样的 &#x1f680;算术转换 &#x1f680;前言 大家好啊&#xff01;这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…

绑定Open AI api-key获取token要怎么操作?

要绑定OpenAI的付费计划并获取API key来调用token接口&#xff0c;你需要按照以下步骤操作&#xff1a; 1. 访问OpenAI官网&#xff1a; 打开浏览器&#xff0c;输入 https://openai.com/&#xff0c;并访问OpenAI的官方网站。 2. 注册/登录账户&#xff1a; 如果你还没有Ope…

揭秘亚马逊中国站API接口:挖掘无限商机,实现高效数据获取

一、概述 亚马逊中国站API接口是一种应用程序接口&#xff0c;允许开发者通过编程方式访问亚马逊中国站的数据和服务。通过使用API接口&#xff0c;开发者可以轻松地获取商品信息、用户数据、订单状态等&#xff0c;从而为他们的应用程序或网站提供更加丰富的内容和功能。 二…

T-Dongle-S3开发笔记——相关配置

portTICK_PERIOD_MS设置 Flash配置 Flash SPI mode 默认是DIO&#xff0c;改为QIO (W25Q128支持QIO) DIO与QIO区别&#xff1a; esp8266&#xff0c;esp32中的SPI FLASH 访问模式&#xff08;QIO QOUT DIO DOUT&#xff09;_qio dio-CSDN博客 Dual SPI:MOSI 和 MISO 引脚…

Spring Boot Security认证:Redis缓存用户信息

文章目录 1. 引言2. Spring Boot Security简介3. 集成Spring Boot Security4. 配置Spring Boot Security5. Redis配置6. Redis缓存用户信息7. 使用Redis缓存的用户信息进行认证8. 测试认证功能9. 性能优化与拓展9.1 性能优化9.2 拓展功能 10. 总结 &#x1f389;欢迎来到架构设…

Gradle下载地址

Gradle下载地址 Gradle是一个基于JVM的构建工具&#xff0c;是一款通用灵活的构建工具&#xff0c;Gradle也是第一个构建集成工具&#xff0c;与ant、maven、ivy有良好的相容相关性。支持maven&#xff0c; Ivy仓库&#xff0c;支持传递性依赖管理&#xff0c;而不需要远程仓库…

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题&#xff0c;也是各大公司笔试面试的常考题目&#xff0c;本文主要介绍BF算法&#xff08;最好想到的算法&#xff0c;也最好实现&#xff09;和KMP算法&#xff08;最经典的&#xff09; 一、BF算法 BF算法&#xff0c;即暴力(Bru…