打造你的专属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

相关文章

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言