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

相关文章

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库