赞
踩
文章内容 | 文章链接 |
---|---|
vue3 antd table表格的增删改查(一)input输入框根据关键字搜索【后台管理系统纯前端filter过滤】 | https://blog.csdn.net/XSL_HR/article/details/128072584?spm=1001.2014.3001.5501 |
vue3 antd table表格的增删改查(二)input输入框根据关键字搜索【后台管理系统 请求后端接口 前后端交互】 | https://blog.csdn.net/XSL_HR/article/details/128089801?spm=1001.2014.3001.5501 |
【JavaScript基础语法】web前端判断数组对象是否含有某个值的方法(6种) | https://blog.csdn.net/XSL_HR/article/details/129787319?spm=1001.2014.3001.5501 |
在后台管理系统的项目开发中,对于数据的查询无处不在,我们可以通过输入全称来进行百分百比对的查询,也可以通过输入关键字进行模糊查询。具体选择什么样的查询效果,可以根据具体需求来选择。不过一般都是以关键字模糊查询为基础。
具体需求: input搜索框可以输入关键字进行模糊查询
解决方法:使用JavaScript原生的filter方法和indexOf方法
实现效果:(输入关键字即可搜索相关结果)
下面介绍具体的解决方法,分别针对三种不同的数据情况。
点击查看原生JavaScript判断数组对象是否有某个元素的方法
搜索框组件的封装和值的双向绑定在这里就不过多解释了,重点介绍模糊查询的实现。
这种数据的结构显然是最简单的,单层是指我们需要查询的数据只被一层数组包裹。运用我们往期封装的模糊查询,稍作更改替换即可。
源代码:
// 搜索广告 const onSearch = () => { let newListData: any = [] if (searchData.bannerTitle && searchData.bannerTitle !== '') { tableData.value.filter(item => { if (item.bannerTitle.indexOf(searchData.bannerTitle) !== -1) { newListData.push(item); } }) tableData.value = newListData } else { // 获取数据 getAllBanner() } } // 数据监听 watch( [() => searchData.bannerTitle], () => { // 如果输入框中的内容为空,则再次请求数据 if (searchData.bannerTitle === "") { // 获取数据 getAllBanner() } } );
详细解释:
- newListData用于存放筛选过后符合条件的数据
- 筛选首先要对搜索框内容进行校验,搜索内容存在且不能是空字符串
- 按照具体需求过滤数组元素,使用indexOf进行数据的二重筛查,最终返回符合要求的数据
- watch进行数据监听,如果输入的数据为空,那么我们将重新调用获取数据的接口,刷新表格数据
实现效果:
以上针对最简单的数据结构实现的模糊查询,下面我们继续介绍查询对象为多层的数组元素。
这种多层的数组元素显然要比单层的简单数组元素要复杂一些,多层数组元素是指我们需要查询的元素被多层数组包裹。但是利用filter和indexOf的嵌套,还是很容易的。
源代码:(含详细注释)
// 搜索证书 const onSearch = () => { let newListData:any = [] if (searchData.certificateName && searchData.certificateName !== '') { tableData.value.filter(item => { // 将表格数据做第一次筛选 得到表格数据的每一项元素 记为item if (item.memberName.filter((item1:string) =>{ // 根据我们需要查询的元素进行第二层筛选 // 我们需要查询的是memberName 这是一个数组元素 // 因此进行第二次筛选 得到memberName里面的每一项元素 记为item1 if(item1.indexOf((searchData.certificateName)) !== -1){ // 利用indexOf进行模糊查询 判断item1中是否含有输入的字符串 newListData.push(item); } })) tableData.value = newListData }) } else { // 获取数据 getAllCertificate() } } // 数据监听 watch( [() => searchData.certificateName], () => { // 如果输入框中的内容为空,则再次请求数据 if (searchData.certificateName === "") { // 获取数据 getAllCertificate() } } );
实现效果:
以上针对多层的数组元素实现了模糊查询,下面进一步介绍更复杂的数组元素如何进行模糊查询。
复杂的数组元素一般是指,后端返回的数据像洋葱一样,一层包一层,并且具有很多种数据类型,比如常见的json格式,数组格式和基础的字符串格式的混合体。所以对于复杂的数组元素,实现模糊查询的关键是要剖析数据结构,调整原先的代码。
直接上代码(含详细注释)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。