打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战

本文主要是介绍打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战

在现代前端开发中,组件化思想是提高开发效率、维护性和代码复用性的关键。本文将通过一个实例——创建一个自定义的“高级筛选”弹窗组件,来展示如何在Vue框架下利用Composition API和Element Plus构建功能丰富且易于集成的UI组件。下面的代码示例不仅展示了组件的结构、样式定制,还涉及了事件处理和属性传递,是一个全面的组件开发教程。

组件效果

在这里插入图片描述

组件概览

我们所创建的“高级筛选”组件基于Element Plus的el-popover,旨在为用户提供一个包含筛选条件输入、清除、提交和取消操作的交互界面。组件设计考虑到了外观自定义、事件触发方式的灵活性以及对父组件的通信支持。

组件代码解析

结构与绑定 (<template>)

组件的模板部分定义了弹窗的结构,利用插槽(<slot>)允许外部插入具体的筛选内容。el-popover包裹了整个组件,并通过:title:trigger:width等属性接收外部配置,确保组件的灵活性。值得注意的是,通过:teleported="false"保持弹窗在DOM树中的位置不变,这在某些特定布局需求下非常有用。

逻辑处理 (<script setup>)

  • 引入依赖: 首先引入了自定义按钮组件MButton以及图标资源。
  • Composition API: 使用defineOptions定义组件名,ref管理弹窗实例,definePropsdefineEmits分别用来声明组件的属性和事件。
  • 事件处理: 定义了clearClicksubmitClickcancelClick方法,用于响应清除、提交和取消操作,并通过emits触发外部监听的事件。
  • 暴露方法: 通过defineExpose对外暴露close方法,使得外部可以控制弹窗的隐藏。

样式定制 (<style>)

  • SCSS: 利用SCSS进行了详细的样式定制,包括按钮的大小调整、图标定位、红色提示点的实现以及弹窗内部元素的布局和间距调整,确保组件的视觉效果与项目整体风格相协调。

实践要点

  1. 组件通信: 通过props接收外部传入的数据和配置,使用emits触发事件,实现了组件间的解耦与消息传递。
  2. 样式封装: 利用scoped样式保护组件内部CSS不污染全局,同时通过类名自定义实现了弹窗内容区域的样式扩展。
  3. 可维护性: 通过Composition API的组合式函数逻辑,使得组件内部状态和行为逻辑清晰,便于维护和测试。
  4. 灵活性与可扩展性: 通过插槽设计,允许组件在不同场景下承载多样的筛选表单内容,提高了组件的复用性和灵活性。

代码展示

<template><el-popover popper-class="searchadvanced" ref="setRemovePop" :title="title" :trigger="trigger" :teleported="false":width="width" v-bind="$attrs"><template #reference><m-button type="primary" class="searchadvanced-icon-btn" :class="{ 'searchadvanced-badge': isDot }":icon="Filter"></m-button></template><slot></slot><div class="searchadvanced-operitoin"><m-button class="clearbtn" type="primary" :icon="Delete" link @click="clearClick">清空</m-button> <m-button class="opbtn cancelbtn" @click="cancelClick">取消</m-button><m-button class="opbtn submitbtn" type="primary" @click="submitClick">确认</m-button></div></el-popover>
</template><script setup lang="ts">
import MButton from '../button'
import { ref } from 'vue'
import { Delete, Filter } from '@element-plus/icons-vue'defineOptions({name: 'MSearchAdvanced'
})const setRemovePop = ref<any>(null)const prop = defineProps({title: {type: String,default: '高级筛选',},trigger: {type: String,default: 'click',},width: {type: [String, Number],default: 900,},isDot: {type: Boolean,default: false,},
})
const emits = defineEmits(['clear', 'submit', 'cancel'])
const clearClick = () => {emits('clear')
}
const submitClick = () => {setRemovePop.value.hide()emits('submit')
}
const cancelClick = () => {setRemovePop.value.hide()emits('cancel')
}
const close = () => {setRemovePop.value.hide()
}defineExpose({close,
})
</script><style lang="scss">
.searchadvanced-icon-btn {display: inline-block !important;line-height: 32px;width: 32px;font-size: 16px;padding: 0 0 0 6px !important;.el-icon {font-size: 16px;}
}.searchadvanced-badge {position: relative;&::after {content: '';position: absolute;width: 10px;height: 10px;background: red;border: 2px solid #fff;border-radius: 50%;right: -5px;top: -5px;}
}.searchadvanced {&.el-popper {padding: 24px;background: #fff;border-radius: 2px;}.el-popover__title {margin-bottom: 26px;}&-operitoin {display: flex;justify-content: flex-end;margin-top: 30px;.opbtn {width: 100px;}}
}
</style>

这篇关于打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022917

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(