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

news2024/9/24 21:22:55

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

  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.coloradmin.cn/o/1334912.html

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

相关文章

JavaScript常用技巧专题五

文章目录 一、使用适当的命名和注释来提高代码可读性二、优雅的写条件判断代码2.1、普通的if else2.2、三元运算符2.3、多个if else2.4、switch case2.5、对象写法2.6、Map写法 三、封装条件语句四、函数应该只做一件事五、Object.assign给默认对象赋默认值六、函数参数两个以下…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 &#xff08;默认为字符串类型&#xff09; 4、命名规则&#xff1a;中文、英文、数字、_&#xff0c;数字不可开头&#xff0c;大小写敏感。 5、 %s&#xff1a;将内容转换成…

2024年手把手教你安装FL Studio Producer Edition 21.2.2.3914中文汉化破解版

FL Studio Producer Edition 21.2.2.3914中文汉化破解版也就是 Image-Line 出品的一款功能强大的编曲软件&#xff0c;全名 Fruity Loops Studio 简称“FL Studio”今天突然的发现我们经常使用的水果音乐制作软件 FL STUDIO 居然从FL STUDIO 21.1.1 一下子跨越了版本号到了FL S…

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated"true"e.hasActivated 进行搜索 将它改为 hasA…

Typora图床搭建PicGo+阿里云OSS(免费白嫖)

文章目录 1. 目的2. 方案2.1 Typora2.2 PicGo2.3 阿里云OSS 3. 开始配置3.1 获取KeyId和KeySecret3.2 创建Bucket3.3 配置PicGo3.4 配置Typora 4. 成功结束 1. 目的 本地使用Typora编写markdown文档的时候&#xff0c;文档中的图片路径是本地的。这个时候如果需要将该markdown…

TDengine 创始人陶建辉受邀参与 TOP100Summit,发表工程师文化主题演讲

在 AGI 时代&#xff0c;数字化成为组织形态的重要特征&#xff0c;它可以帮助组织实现上下一致的目标和信息的高频传递&#xff0c;从而实现战略目标的协同和敏捷进化。在这样的大背景下&#xff0c;开发者们面临的实际挑战是如何避免技术和业务之间的割裂。 12 月 14-17 日&…

革新搜索从健康场景开始 夸克App全面升级健康搜索体验

大模型时代&#xff0c;夸克率先迈出了革新搜索的第一步。12月25日&#xff0c;夸克App宣布全面升级健康搜索&#xff0c;推出健康大模型应用“夸克健康助手”&#xff0c;并在部分搜索结果和功能板块中上线全新的内容交互方式。升级后&#xff0c;用户在夸克中搜索健康信息的正…

05|提示工程(下):用思维链和思维树提升模型思考质量 ## 什么是 Chain of Thought

05&#xff5c;提示工程&#xff08;下&#xff09;&#xff1a;用思维链和思维树提升模型思考质量 什么是 Chain of Thought CoT 这个概念来源于学术界&#xff0c;是谷歌大脑的 Jason Wei 等人于 2022 年在论文《Chain-of-Thought Prompting Elicits Reasoning in Large La…

华清远见嵌入式学习——ARM——作业3

作业要求&#xff1a; 代码效果图&#xff1a; 代码&#xff1a; led.h #ifndef __LED_H__ #define __LED_H__#define RCC_GPIO (*(unsigned int *)0x50000a28) #define GPIOE_MODER (*(unsigned int *)0x50006000) #define GPIOF_MODER (*(unsigned int *)0x50007000) #defi…

TensorFlow 模型中的回调函数与损失函数

回调函数 tf.keras 的回调函数实际上是一个类&#xff0c;一般是在 model.fit 时作为参数指定&#xff0c;用于控制在训练过程开始或者在训练过程结束&#xff0c;在每个 epoch 训练开始或者训练结束&#xff0c;在每个 batch 训练开始或者训练结束时执行一些操作&#xff0c;…

如何使用PatchaPalooza对微软每月的安全更新进行全面深入的分析

关于PatchaPalooza PatchaPalooza是一款针对微软每月安全更新的强大分析工具&#xff0c;广大研究人员可以直接使用该工具来对微软每月定期推送的安全更新代码进行详细、全面且深入的安全分析。 PatchaPalooza使用了微软MSRC CVRF API的强大功能来获取、存储和分析安全更新数…

大语言模型说明书

在浩瀚的信息宇宙中&#xff0c;大语言模型如同一颗璀璨的星星正在熠熠生辉。21世纪以来&#xff0c;人工智能可谓是飞速发展&#xff0c;从简单的神经网络到大语言模型、生成式AI&#xff0c;这并非仅仅是一种技术的进步&#xff0c;更是人类智慧的飞跃。大语言模型不仅仅是语…

Wireshark网络工具来了

Wireshark是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包&#xff0c;并尝试显示包的尽可能详细的情况。 Wireshark是一个免费开源软件&#xff0c;不需要付费&#xff0c;免费使用&#xff0c;可以直接登陆到Wireshark的官网下载安装。 在windows环境中&#x…

【强化学习】PPO:近端策略优化算法

近端策略优化算法 《Proximal Policy Optimization Algorithms》 论文地址&#xff1a;https://arxiv.org/pdf/1707.06347.pdf 一、 置信域方法(Trust Region Methods) ​ 设 π θ o l d \pi_{\theta_{old}} πθold​​是先前参数为 θ o l d \theta_{old} θold​的策略网…

JavaScript:DOM-事件

JavaScript&#xff1a;DOM - 事件 事件监听什么是事件监听事件监听的方式事件类型点击事件鼠标事件键盘事件焦点事件文本框输入事件 事件对象什么是事件对象获取事件对象事件对象常用属性事件解绑 环境对象 this事件流事件捕获事件冒泡事件捕获与事件冒泡的影响阻止冒泡事件委…

CentOS7安装Java11

文章目录 Java11下载地址卸载OpenJDK查询原系统安装的 JDK根据原系统安装的 JDK 进行卸载命令修改 安装JDK生成JRE Java11下载地址 https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 卸载OpenJDK 查询原系统安装的 JDK java -version yum l…

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

深入探讨多模态模型和计算机视觉

近年来&#xff0c;机器学习领域在从图像识别到自然语言处理的不同问题类型上取得了显着进展。然而&#xff0c;这些模型中的大多数都对来自单一模态的数据进行操作&#xff0c;例如图像、文本或语音。相比之下&#xff0c;现实世界的数据通常来自多种模态&#xff0c;例如图像…

前端---html 的介绍

1. 网页效果图 --CSDN 2. html的定义 HTML 的全称为&#xff1a;HyperText Mark-up Language, 指的是超文本标记语言。 标记&#xff1a;就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1></h1> 等&#xff0c;标签大多数都是…

Echarts随机生成颜色

Echarts生成随机颜色&#xff0c;并且不要黑色、灰色、棕色等难看的颜色&#xff0c;暖色系并且颜色亮丽&#xff0c; 可以通过修改saturation 和lightness 的随机数值&#xff0c;提高颜色饱和度和亮度 function generateWarmColor() {let hue Math.floor(Math.random() * 3…