【vue/组件封装】封装一个带条件筛选的搜索框组件(多组条件思路、可多选)详细流程

引入:实现一个带有筛选功能的搜索框,封装成组件;

搜索框长这样子:
在这里插入图片描述
点击右侧筛选图标后弹出层,长这样子:
在这里插入图片描述
实际应用中有多组筛选条件,这里为了举栗子就展示一组;

预览:
请添加图片描述

实现思路

  1. css 样式大致布局;
  2. 选中和取消选中的效果、样式切换等;
  3. 多选的功能;
  4. 多组筛选条件的多选功能;

需要给父组件传递的数据有:

  • 点击搜索按钮时传【输入的内容】;
  • 点击查询按钮时传【选择的查询条件】

进一步的实现:

  • 首先写好基础的静态样式;
  • 当要开始写功能的时候,可以换成接口调用的动态数据,从父组件传入;
  • 先写单选,动态绑定 class 样式来实现选中之后的样式:
:class="{ 'seled-btn': venSeled.includes(index) }"
  • 选中后考虑还需要取消,因为条件筛选是多选的,所以是将下标保存进数组中:
if (this.typeSeled.includes(index)) {// 筛掉【当前选中的】和【数组中】不一致的下标,即只保存相等的this.typeSeled = this.typeSeled.filter(item => item != index)
} else {// 未选中就添加进数组中this.typeSeled.push(index)
}

代码:

<!-- 带条件筛选的搜索框组件--><template><view class="container"><u-popup v-model="show" mode="top" border-radius="14" length="50%"><view class="wrap"><view class="wrap-top"><p>类型:</p><view class="item"><view v-for="(item, index) in typeList" :key="index" @click="seledBtn(index, 'type', item)"class="btn sel-btn" :class="{ 'seled-btn': typeSeled.includes(index) }">{{ item }}</view></view></view></view><view class="wrap-foot" style="display: flex;"><u-button @click="reset">重置</u-button><u-button type="primary" @click="searchRes">查询</u-button></view></u-popup><u-search @custom="searchClick" :show-action="true" v-model="val" placeholder="请输入" shape="square":border="border" :animation="false"></u-search><img class="right-icon" @click="show = true" src="../../../../static/gzt/filter.png" width="18" height="18" alt=""></view>
</template><script>
export default {props: {vehList: {type: Array},workList: {type: Array}},data() {return {typeList: ['类型1', '类型2'],// 是否点击typeSeled: [],val: '',border: true,show: false}},methods: {// 点击搜索searchClick() {this.$emit('singleClick', this.val)},// 选中某一个条件seledBtn(index, type, itemVal) {// console.log('type', type);if (type == 'type') {if (this.typeSeled.includes(index)) {// 筛掉【当前选中的】和【数组中】不一致的下标this.typeSeled = this.typeSeled.filter(item => item != index)} else {// 未选中就添加进数组中this.typeSeled.push(index)}} },// 点击重置reset() {this.typeSeled = []},// 点击查询searchRes() {let typeRes = []// 整理数据// typeList typeSeledthis.typeList.forEach((item, index) => {this.typeSeled.forEach(item1 => {if (index == item1) {typeRes.push(item)}})})// 给父组件发送选择的查询条件this.$emit('filterSearch', typeRes)}}
}
</script>

样式参考:

<style lang="scss">
.wrap {padding: 0 15px 60px 15px;// background-color: pink;.wrap-top {margin-top: 10px;>p {color: #4F4B46;}.item {display: flex;flex-wrap: wrap;margin-top: 10px;}// btn的共有样式.btn {margin-top: 5px;margin-right: 8px;width: 30%;text-align: center;padding: 5px;border-radius: 8px;}// 未被选中的样式.sel-btn {background-color: #F5F7F8;color: #717171;border: 1px solid #F0F0F0;}// 被选中的样式.seled-btn {background-color: #EDF5FF;border: 1px solid #6AA4EC;color: #6AA4EC;}}
}::v-deep .u-btn--default {color: #b7b8b8 !important;border-radius: 0px;
}.wrap-foot {position: fixed;margin-top: 5px;bottom: -1px;width: 100%;
}::v-deep uni-button {width: 100%;
}.container {display: flex;background-color: white;padding: 5px;border-radius: 8px;.right-icon {margin-top: 7px;margin-left: 10px;}
}::v-deep .u-action-active {color: gray;
}::v-deep .u-content {border: 1px solid #ccc !important;
}
</style>

关于有好几组筛选条件时怎么进行选择,我的方法是,在 seledBtn 函数里写一个循环,以 0-几组筛选条件的长度进行循环,最终数组只有一个,给这个数组里对应下标里进行增加或删除,下标对应的是第几组筛选条件,比如我有3组,最终数组就是:[[],[],[]] 这么一个嵌套数组;

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

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

相关文章

07-prometheus的自定义监控-pushgateway工具组件

一、概述 pushgateway用于自定义监控节点、节点中服务的工具&#xff0c;用户可以通过自定义的命令获取数据&#xff0c;并将数据推送给pushgateway中&#xff1b; prometheus服务&#xff0c;从pushgateway中获取监控数据&#xff1b; 二、部署pushgateway 我们可以“随便”找…

Pytorch学习 day03(Tensorboard、Transforms)

Tensorboard Tensorboard能够可视化loss的变化过程&#xff0c;便于我们查看模型的训练状态&#xff0c;也能查看模型当前的输入和输出结果 在Pycharm中&#xff0c;可以通过按住ctrl&#xff0c;并左键点击某个库来进入源文件查看该库的使用方法SummaryWriter是用来向log_dir…

【数据结构】顺序表+链表

目录 1.顺序表 1.1初始化顺序表 1.2销毁顺序表 1.3检查容量并扩容 1.4把某个元素插入到下标为pos的位置 1.5头插和尾插 1.6删除下标为pos的元素 1.7头删和尾删 2.顺序表的问题及思考 3.链表 3.1链表的访问 3.2链表的增删查改 1.顺序表 顺序表的本质其实就是一个数组…

Tensorflow2.0笔记 - 计算梯度

本笔记主要记录tf.GradientTape和tf.gradient的用法 import tensorflow as tf import numpy as nptf.__version__#要计算梯度的所有参数计算过程必须放到gradient tape中 #with tf.GradientTape as tape: w tf.constant(1.) x tf.constant(2.)with tf.GradientTape() as tap…

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型 IMU测量方程中的噪声模型IMU的离散时间噪声模型 IMU测量方程中的噪声模型 在大多数系统中&#xff0c;IMU的噪声由两部分组成&#xff1a;测量噪声&#xff08;Measurement Nosie&#xff09;与零偏&#xff08;Bias&#…

1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率

文章目录 1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率&#xff08;一&#xff09;时延&#xff08;二&#xff09;时延带宽积&#xff08;三&#xff09;往返时延RTT&#xff08;四&#xff09;利用率 1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率 …

wireshark抓取localhost(127.0.0.1)数据包

打开wireshark中&#xff0c;在"capture"菜单中&#xff0c;选择"interfaces"子菜单&#xff0c;在列出的接口中选中"Adapter for loopback traffic capture"即可。 必须安装了Npcap才有此选项&#xff0c;否则需要重新安装wireshark。 抓包截图…

桥梁安全监测方案:多维度的技术与设备应用

一、背景与意义 随着交通基础设施的快速发展&#xff0c;桥梁作为连接两岸的关键纽带&#xff0c;其安全性能直接关系到人们的生命财产安全和交通畅通。为确保桥梁的安全与稳定&#xff0c;及时发现潜在的安全隐患&#xff0c;采取科学、有效的安全监测方案显得尤为重要。本文将…

材料物理 (HIT) 笔记-2

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; 三…

进程间通信之信号灯 || 网络协议UDP/TCP || 三次握手四次挥手

在线程通信中由于数据段等内存空间的共用性&#xff0c;导致同时访问时资源竞争的问题&#xff0c;在线程中我们使用信号量的申请和释放&#xff0c;在防止资源竞争的产生。在进程间的通信中&#xff0c;有信号灯的概念。搭配共享内存实现进程同步。 有名信号量: 1.创建 …

HTML标签语义化,含面试题+答案

form表单细节 一、表单 1.表单 标签用于为用户输入创建 HTML 表单 2.表单能够包含 input 元素&#xff0c;比如文本字段、复选框、单选框、提交按钮等等。 3.表单还可以包含 menus、textarea、fieldset、legend 和 label 元素。 4.表单用于向服务器传输数据。 二、表单form 的…

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样&#xff0c;绿色反光部分&#xff08;我的手忽略&#xff09;&#xff1a; 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到&#xff0c;选型很重要&#xff01;

代码还原之 函数

指令堆里逆向出来的代码有歧义&#xff0c;有三处返回&#xff0c;有嵌套IF语句&#xff0c;故推断出是个函数&#xff1b; #if 0/*27ec: 48 8d 3d 58 39 00 00 lea 0x3958(%rip),%rdi # 614b <_IO_stdin_usedBase0x14b> // rdi"COLUMNS"27f3: e8 e…

【鸿蒙 HarmonyOS 4.0】多设备响应式布局

一、背景 在渲染页面时&#xff0c;需要根据不同屏幕大小渲染出不同的效果&#xff0c;动态的判断设备屏幕大小&#xff0c;便需要采用多设备响应式布局。这种设计方法能够动态适配各种屏幕大小&#xff0c;确保网站在不同设备上都能呈现出最佳的效果。 二、媒体查询&#xf…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

【ELK日志分析系统】ELK+Filebeat分布式日志管理平台部署

ELKFilebeat部署一、ELK简介1、ELK组件1.1 其他组件 2、为什么要使用 ELK3、完整日志系统基本特征 二、ELK的工作原理三、ELK Elasticsearch 集群部署1、环境准备2、部署 Elasticsearch 软件(node节点)2.1 安装elasticsearch—rpm包2.2 修改elasticsearch主配置文件2.3 es性能调…

Nerf原理理解

神经辐射场是一个简单的全连接网络&#xff08;权重约为 5MB&#xff09;&#xff0c;经过训练可使用渲染损失再现单个场景的输入视图。该网络直接从空间位置和观看方向&#xff08;5D 输入&#xff09;映射到颜色和不透明度&#xff08;4D 输出&#xff09;&#xff0c;充当“…

AntV L7初体验

本案例使用L7库和Mapbox GL JS创建的简单地图可视化示例&#xff0c;加载点数据。 文章目录 1. 引入 CDN 链接2. 导出模块3. 创建地图3.1. 注册 token3.2. 创建地图实例 4. 创建场景5.创建点图层6. 演示效果7. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <!--…

数据库期末速成100分训练,附练手数据库原件及教程

本文提供下面数据库代码的数据库原件&#xff0c;下载后可使用 教程如下&#xff1a; 1.打开sql sever 2.找到数据库 3.右键数据库点击“附加”&#xff0c;然后点击“添加” 4.导入数据库原件&#xff0c;点击确定 ps&#xff1a;如果没有sqlsever 或者页面编辑器&#x…

manjaro 安装 wps 教程

内核: Linux 6.6.16.2 wps-office版本&#xff1a; 11.10.11719-1 本文仅作为参考使用, 如果以上版本差别较大不建议参考 安装wps主体 yay -S wps-office 安装wps字体 &#xff08;如果下载未成功看下面的方法&#xff09; yay -S ttf-waps-fonts 安装wps中文语言 yay …