当前位置: 首页 > Web前端 > HTML5

vue使用slot槽技术封装一个dialog弹出框组件(组件编程思想)

时间:2023-04-05 15:53:44 HTML5

.box{width:200px;高度:200px;background-color:#baf;}slot技术封装对话框组件前回顾为什么要封装组件(组件开发)组件开发(封装组件)的好处很明显,可以增加代码的可重用性和灵活性,从而提高开发效率。试想一下,如果一个项目中的多个页面都可以使用一个弹出框,如果你在每个页面都写一套弹出框结构样式和相应的js逻辑。在这种情况下,开发效率会大大降低。毕竟现在产品经理提倡敏捷开发(跑快游戏)。组件化开发的理解假设我们封装了一个公共的弹框组件,需要用到的地方引用即可。什么???不同页面的弹框有不同的数据?有的是添加数据弹框,有的是修改数据弹框,有的是删除数据弹框。没关系!根据弹出框的文字,传入不同的参数即可。例如,要添加一个弹出框,传入'add'这个词;修改弹框,传入'modify'等字样。什么???不同的弹出框略宽一些略高,样式略有不同,没关系,直接用深度范围选择器/deep/设置就好了,什么???不同的弹框点击确认按钮,最终的业务逻辑不同,有的增加一条数据,有的删除一条数据等。组件之间的数据传递无所谓,记住event的语法即可相关的触发器。封装组件的一种更常用的技术是插槽。在封装对话框组件之前,我们先来回顾一下槽的相关知识。为什么会有slotslotapi的诞生源于Vue数据传输的需求,因为通常我们使用props从parent向child传输数据,传输的数据是“js类型的数据”,比如对象,数组,和字符串。当我们要传递大量html类型的片段数据时,应该怎么办?有这样的需求,于是槽技术应运而生。在组件化编程中,不需要传递css,因为我们可以使用深度作用域选择器,比如/deep/,在父组件中选择子组件中的dom元素来设置样式槽的分类默认槽(也称为:普通槽、单槽、匿名槽。即没有名字,就不需要设置name属性)Namedslots(withaname,withanameattribute)scopeSlots(这是slots的一个稍微高级的用法,就case而言,它在饿了么UI中的表格中很有用)slots可以在饿了么UI或antD封装的组件中看到,以el-dialog作为例如,它使用默认插槽和命名插槽。可以说,套接字技术基本上用在了UI组件上。有空的话可以去看看饿了么UI封装组件的源码。包/组件很多,找element-ui下的包,都是饿了么打包的componentscopeslots。这篇文章暂时不会用到,先按一下按钮,然后单独写一篇关于功能的文章DomainSlotsArticleAnonymous(default)SlotsUsingSubcomponentsPlaceAnonymousSlots

我是一个子组件

.box{width:200px;高度:200px;background-color:#baf;}父组件使用匿名slot传递HTML#app{width:100%;最小高度:100vh;框大小:边框框;padding:50px;}渲染中命名槽的使用。比如我们要封装一个弹出框组件。框的主要内容区域和弹出框的底部内容区域。我们可以在弹框的主要内容区域使用匿名槽。如果弹框需要指定表头内容和弹框底部内容,可以通过namedslot指定具体内容。结构代码如下:子组件放置在命名槽中,函数是指定槽位-->
.box{宽度:170px;高度:200px;background-color:#baf;}在父组件中使用命名槽通过HTML我被父组件传过来了

模板标签底部

#应用程序{宽度:100%;最小高度:100vh;框大小:边框框;padding:50px;}渲染开始封装对话框组件。第一步是封装组件并注册它。我不会在本文中详细介绍。如果忘记了步骤,可以先看我的文章。它包括全局组件的封装步骤,也包括组件之间的数据传递值。附上地址:https://segmentfault.com/a/11...弹框弹出或关闭,设置转场动画。使用默认插槽作为主要内容区域。使用命名槽指定弹出框对应的头部内容和底部内容。打开或关闭弹框遮罩层的背景。点击遮罩层可以控制弹框是否关闭。是否显示闭合的十字图标。自定义弹框标题等,代码如下。封装好的组件代码.dialogBox{width:100%;高度:100%;位置:固定;顶部:0;左:0;显示:弹性;证明内容:居中;对齐项目:居中;.dialogBoxContent{宽度:600px;高度:400px;边框:2px实心#e9e9e9;边界半径:2px;背景色:#fff;.headhead{宽度:100%;高度:60px;行高:60px;border-bottom:1pxsolid#e9e9e9;框大小:边框框;填充:20px;显示:弹性;证明内容:空格之间;对齐项目:居中;span{字体大小:24px;}i{字体大小:24px;游标:指针;}}.bodybody{宽度:100%;高度:计算(100%-120px);}.footfoot{宽度:100%;高度:60px;行高:60px;框大小:边框框;border-top:1pxsolid#e9e9e9;填充:020px;.el按钮n{左边距:12px;}}}}.isShowMask{background-color:rgba(0,0,0,0.3);}.animation-enter,.animation-leave-to{opacity:0;}.animation-enter-active,.animation-leave-active{transition:opacity0.3s;}使用组件传递参与事件代码取消确认


打开弹出框#app{width:100%;最小高度:100vh;框大小:边框框;padding:50px;}最终效果图总结代码中注释比较完整。更方便的方法是新建一个Vue项目,然后分别粘贴代码。注意封装的myDialog组件,别忘了如果要注册,本文讲解了封装和组件化槽的使用思路,具体业务场景可以灵活修改。