vue写法——使用js高阶函数实现多条件搜索功能

news2024/11/11 5:13:38

在这里插入图片描述
🙂博主:爱学习的Akali king
🙂本文核心:vue写法——使用js高阶函数实现多条件搜索功能

目录

  • 类比一下react写法
  • 用vue写法来实现,思路+步骤:
    • 第一步:准备数据
    • 第二步:根据数据结构渲染Dom
    • 第三步:处理筛选条件
    • 第四步:封装
  • vue写法实现前端搜索功能(完整代码)

类比一下react写法

之前出过一个react写法的前端搜索(react写法——使用js高阶函数实现多条件搜索功能)
今天我们再研究一下vue中怎么实现。
react和vue有什么区别?
这个区别要细说可太多了,但是最终都能归为语法不同,封装方式不同,但本质一样,都是基于JavaScript的两种不同框架语言(相当于龙生九子,各有不同)。

用react实现前端搜索功能,我们有三步:
第一步:创建一个假数据,这一步是为了模拟后端接口返回给前端使用的数据,格式一般是数组包对象形式。
第二步:引入表格组件,将数据进行Dom渲染。这个时候我们要准备三个变量,data变量用来接收存放数据,list变量用来做数据渲染,search变量用来数据筛选
第三步:利用js高阶函数来筛选条件,有几个条件就筛选几次。筛选条件之间是交集关系。

那么vue呢?

之前用react写法实现前端搜索功能时,我们是从思路出发的,并不局限于框架语言。所以我们用vue实现前端搜索,思路也是一样,还是这三步。不过我们要做一个新的东西,就是封装。

因为我们将一个搜索功能写好后,这就相当于是一个工具函数。 在需要这一功能的时候,我们去调用即可,所以我们把这个功能封装起来,需要的时候导入即可。

这样也算是实现了代码复用,并优化了性能。

我们依然采用尽可能最简单的方式来实现,其实vue实现会更加容易。如果用react要100行实现,那么vue就是50行。


用vue写法来实现,思路+步骤:

第一步:准备数据

创建一个假数据,这一步是为了模拟后端接口返回给前端使用的数据,格式一般是数组包对象形式。

const list = ref([
  { id: 1, name: '张温', age: '19', gender: '男' ,skill:`狂风绝息斩`},
  { id: 2, name: '张三丰', age: '38', gender: '男',skill:`封尘绝念斩` },
  { id: 3, name: '张无忌', age: '25', gender: '男',skill:`天霸横空烈击` },
  { id: 4, name: '王无维', age: '25', gender: '男',skill:`魔影迷踪` },
  { id: 5, name: '马云禄', age: '27', gender: '女',skill:`大地之力` },
  { id: 6, name: '黄月英', age: '15', gender: '女',skill:`张嘉文一枪做掉` },
  { id: 7, name: '李青', age: '15', gender: '女',skill:`妙手回春` },
  { id: 8, name: '亚索', age: '12', gender: '女',skill:`随后枪出如龙` },
  { id: 9, name: '暗影', age: '78', gender: '女',skill:`一点寒芒先到` },
  { id: 10, name: '剑魔', age: '87', gender: '女',skill:`狐臭` },
  { id: 11, name: '蛮族之王', age: '17', gender: '女',skill:`五神之力` },
  { id: 12, name: '无双剑姬', age: '25', gender: '女',skill:`铁布衫` },
  { id: 13, name: '青钢影', age: '45', gender: '女',skill:`天音波` },
  { id: 14, name: '波比', age: '36', gender: '女',skill:`神龙摆尾` },
  { id: 15, name: '乐芙兰', age: '17', gender: '女',skill:`金钟罩` },
  { id: 16, name: '大树', age: '23', gender: '女',skill:`困天地` },
  { id: 17, name: '蛤蟆', age: '18', gender: '女',skill:`一口吃掉` },
  { id: 18, name: '永恩', age: '17', gender: '女',skill:`哈撒给` },
])

这里我们直接给了list变量,相当于接口返回给前端的数据,我们深拷贝了一次给list变量。(这也是我们要声明的第一个变量)


第二步:根据数据结构渲染Dom

我们要声明三个变量。第一个变量叫list,用于接收接口返回的数据。第二个变量data,用于渲染表格。第三个变量search,用于存放处理筛选条件后的数据。

const data=ref(list.value)
const search = reactive({
  name:{
    value:``,
    than:'includes',
  },
  age: {
    value:``,
    than:'includes',
  },
  gender:{
    value:``,
    than:'includes',
  },
  skill:{
    value:``,
    than:'includes',
  }})

引入表格组件,渲染

    <el-table :data="list">
      <el-table-column prop="name"
                       label="name" />
      <el-table-column prop="age"
                       label="age" />
      <el-table-column prop="gender"
                       label="gender" />
      <el-table-column prop="skill"
                       label="skill" />

    </el-table>

第三步:处理筛选条件

数据中有5个字段,分别是id,name,age,gender,skill。所以我们最多可以设置5个搜索框,但是一般情况下,不会设置id搜索框,意义不大。
最终我们选择nameagegenderskill四个字段作为条件,设置四个搜索框。并给四个搜索框绑定input事件,即一边输入一遍显示,属于双向数据绑定,这种搜索体验感非常爽。

    <el-form>
      <el-form-item label="name">
        <el-input v-model="search.name.value" @input="searchEvent"/>
      </el-form-item>
    <el-form-item label="age">
      <el-input v-model="search.age.value" @input="searchEvent"/>
    </el-form-item>
    <el-form-item label="gender">
      <el-input v-model="search.gender.value" @input="searchEvent"/>
    </el-form-item>
    <el-form-item label="skill">
      <el-input v-model="search.skill.value" @input="searchEvent"/>
    </el-form-item>
    </el-form>

其中绑定的函数searchEvent,我们要用到js高阶函数实现多条件筛选。

function searchEvent(){
  let arr = [...data.value]
  for (const item in search) {
    arr = arr.filter((row) => row[item].includes(search[item].value))
  }
  return arr
}

至此已经实现了前端搜索功能
⭐⭐效果:
在这里插入图片描述


第四步:封装

这一步,我们将功能封装一下。封装的核心,其实是封装逻辑,也就是说:多个地方都需要用到搜索这一功能,其实用的是这一逻辑。所以封装的是逻辑代码。
最终我们App.vue页面只保留

function searchEvent(){
  list.value=handleSearch(search,data.value)
}

新建一个search.js文件,逻辑代码封装在这个文件中:

export function handleSearch(searchObj, all) {
  let arr = [...all]
  for (const item in searchObj) {
    console.log(searchObj[item].value)
    arr = arr.filter((row) => row[item].includes(searchObj[item].value))
  }
  return arr
}

同时在App.vue页面需要导入

import {handleSearch} from "./search.js";

vue写法实现前端搜索功能(完整代码)

完整代码,打包成资源上传了。需要研究的可以等资源上传成功下载学习。

说明一下:
下载后,需要终端执行命令:
npm i,安装依赖
npm run dev运行项目

有不明白的,欢迎评论区留言讨论。如果本文解决了你的问题,对你有帮助,还望不吝三连🙂🙂🙂

在这里插入图片描述


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

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

相关文章

ModaHub魔搭社区:向量数据库Milvus性能调优教程(一)

目录 性能调优 插入性能调优 查询性能调优 硬件环境 系统参数 性能调优 插入性能调优 “数据插入”到“数据写入磁盘”的基本流程请参考 存储操作。 如果数据量小于单次插入上限&#xff08;256 MB&#xff09;&#xff0c;批量插入比单条插入要高效得多。 系统配置中…

Boom 3D For Win如何进行安装、激活和换机?

Boom系列应用软件又迎来了一位新的“猛将”— 隆重升级的Boom 3D&#xff08;Windows系统&#xff09;&#xff01;这款主打3D环绕音效的软件&#xff0c;既能使用在Windows设备上&#xff0c;也能使用在MAC设备上。Boom 3D既可以让你体验到高质量的3D环绕音效&#xff0c;也能…

我们来谈谈websocket

"你一无所有地闯荡。" 一、初始WebSocket (1) 什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第九章 Internet安全协议)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、安全协议概述二、IPSec协议1、概述2、IP封装过程3、IPSec不安全性4、IPSec的功能5、IPSec体系结构6、IPSec的AH7、IPSec的AH8、IPSec的ESP9、IPSec的ESP10、ISAKMP11、IK…

分析油烟污染的危害及其控制防治对策 安科瑞 许敏

摘 要&#xff1a;介绍了烹饪油烟的组成及危害&#xff0c;着重概述了家庭烹饪油烟污染特点以及净化技术的研究进展&#xff0c;对各技术特点及存在的问题进行了分析&#xff0c;初步探讨了新近发展的静电催化耦合技术在烹饪排放污染控制中的应用&#xff0c;分析了现行的吸油烟…

全志V3S嵌入式驱动开发(spi-nand image制作和烧入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上一篇文章,我们说到了spi-nor image的制作和输入。相比较spi-nor,spi-nand虽然在稳定性上面差一点,但是价格上面有很大的优势。举例来说,一般32M的spi-nor大约在6-7元左右,但…

软件外包开发在线监控工具

软件系统上线后需要实时监控&#xff0c;这样在系统出现问题后可以及时发现问题并解决问题。今天和大家分享常见的软件系统监控工具&#xff0c;这些工具功能强大且成熟稳定&#xff0c;熟练的应用可以帮助运维人员解决很多项目中的实际问题。北京木奇移动技术有限公司&#xf…

ubuntu dlib 编译 人脸检测

编译&#xff1a; ubuntu14.04 dlib19.2【 C 】Face Landmark Detection_FR-0912的博客-CSDN博客 也可这样 cmake .. -DUSE_AVX_INSTRUCTIONS1 cmake --build .测试代码 linux安装dlib&#xff0c;关键点检测_dlib linux_Peanut_范的博客-CSDN博客 CmakeList.txt cmake_mini…

QtCreator工具下载链接

QT工具下载链接&#xff1a; 离线安装的安装包下载链接&#xff1a; Index of /archive/qthttp://download.qt.io/archive/qt/ 在线安装的安装包下载链接&#xff1a; Index of /archive/online_installershttps://download.qt.io/archive/online_installers/

第八十六天学习记录:Linux基础:基础指令Ⅰ

Linux系统的目录结构 Linux的目录结构是一个树型结构 Linux没有盘符的概念&#xff0c;只有一个根目录/&#xff0c;所有文件都在根目录下面 Linux系统的路径表达形式 在Linux系统中&#xff0c;路径之间的层级关系使用&#xff1a;/来表示。&#xff08;windows系统中用\&a…

ecology9-导出流程上图片附件的方案

ecology9 导出流程上图片附件 方案一方案二√方案三 ecology9 把图片名称位置等信息存储在imagefile中&#xff0c;实际文件以zip压缩包的形式存储在服务器上。需求是提供导出历史流程上的图片附件&#xff0c;方便新系统导入 方案一 编写图片附件下载接口&#xff0c;查询到图…

Java双指针专题——1.移动0 2.复写0 3.快乐数4.盛最多水的容器5.有效三角形的个数 6.和为s的两个数字7.三数之和8.四数之和

目录 1.移动0 2.复写0 3.快乐数 4.盛最多水的容器 5.有效三角形的个数 6.和为s的两个数字 7.三数之和 8.四数之和 1.移动0 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组…

实施预测性维护的策略和实践探讨

随着工业设备复杂性和关键性的增加&#xff0c;传统的计划性维护方法已经无法满足现代工业的需求。预测性维护作为一种基于设备状态和数据分析的维护策略&#xff0c;能够准确预测设备故障&#xff0c;降低停机时间&#xff0c;提高生产效率和设备可靠性。在实施预测性维护之前…

初出茅庐的小李博客之RTC时间设置

串口上位机设置RTC时间进行校准 方式1&#xff1a;发送固定格式时间解析 代码&#xff1a; #include <stdio.h> #include <string.h> /* 当在格式字符串中使用 %*[^:] 时&#xff0c;它表示在读取输入时跳过冒号 : 之前的任何字符。 %*&#xff1a;星号 * 表示读…

DeepMind发布多任务机器人RoboCat;沧海拾珍之LLM、GPT

&#x1f989; AI新闻 &#x1f680; DeepMind发布多任务机器人控制AI模型RoboCat 摘要&#xff1a;谷歌旗下DeepMind发布了名为RoboCat的AI模型&#xff0c;该模型可以控制不同机器人手臂执行多项任务。RoboCat是第一个能够解决和适应多种任务的模型&#xff0c;并且使用真实…

过滤器-filter

1 Servlet规范中的过滤器-Filter 1.1 过滤器入门 1.1.1 过滤器概念及作用 过滤器——Filter&#xff0c;它是JavaWeb三大组件之一。另外两个是Servlet和Listener。 它是在2000年发布的Servlet2.3规范中加入的一个接口。是Servlet规范中非常实用的技术。 它可以对web应用中…

CSS3新增了哪些新特性?

一、是什么 css&#xff0c;即层叠样式表&#xff08;Cascading Style Sheets&#xff09;的简称&#xff0c;是一种标记语言&#xff0c;由浏览器解释执行用来使页面变得更美观 css3是css的最新标准&#xff0c;是向后兼容的&#xff0c;CSS1/2的特性在CSS3 里都是可以使用的…

最优化方法(基于lingo)之 求解线性规划问题(1/6)

一、实验目的&#xff1a; 1. 会建立合理的规划模型&#xff1b; 2. 学习掌握Matlab中求解线性规划的命令&#xff1b; [x,fval]linprog(f,A,b); [x,fval]linprog(f,A,b,Aeq,beq); [x,fval]linprog(f,A,b,Aeq,beq,lb;ub); 3. 要求学生能在计算机上应用各种优化软件包熟练地操作…

音视频流媒体开发工作机会占80%的市场份额

音视频流媒体开发领域的工作机会在过去几年中确实呈现出了快速增长的趋势。随着互联网的普及和网络带宽的提高&#xff0c;人们对音视频内容的需求也越来越大&#xff0c;这导致了许多公司和组织寻求音视频流媒体开发人员来满足市场需求。 音视频流媒体开发工作的主要流程可以概…

对MVVM和MVC开发模式的理解

对MVVM和MVC开发模式的理解 1、MVVM2、MVC3、MVVM与MVC的区别 1、MVVM MVVM最早由微软提出来&#xff0c;它借鉴了桌面应用程序的MVC思想&#xff0c;在前端页面中&#xff0c;把Model用纯JavaScript对象表示&#xff0c;View负责显示&#xff0c;两者做到了最大限度的分离&am…