1、探讨需求封装popup自定义弹窗组件

首先我们需要探讨一下,封装自定义的组件都需要什么功能

  • 需要一个半透明灰色的背景,用于区分与非弹窗内容,点击灰色区域也可以关闭弹窗。
  • 需要一个关闭按钮和两个操作按钮,一个确定,一个取消。
  • 弹窗内容:标题,内容区域,因为是自定义所以都使用了具名插槽,也可以设置默认的显示内容。
  • 弹窗的显示位置,本次封装只考虑了居中与页面底部两个常用显示位置。

2、实战开发弹窗组件

2.1 子组件内容 popup.vue文件

<template>
	<view class="mark" v-if="isShow" @click="close">
		<view :class="bottom?'bottom':'center'" class="content" >
			<view @click="close">
				<image class="close" src="../static/close.png" ></image>
			</view>
			<slot name="title">
				<view class="title">子组件默认标题</view>
			</slot>
			<slot name="body">
				<text style="font-size: 14px;">确定要取消订单吗?取消之后购物车也将清空。</text>
			</slot>
			<slot name="bottom">
				<view class="btns">
					<view class="confirm btn" @click="confirm">确定</view>
					<view class="cancel btn" @click="cancel">取消</view>
				</view>
			</slot>
		</view>
	</view>
</template>

<script>
	export default {
		props: {
			isShow: {
				type: Boolean,
				default: false
			},
			// 子组件接收一个布尔类型的bottom,如果为true则弹窗则在页面的底部,false为默认居中显示
			bottom: {
				type: Boolean,
				default: false
			}
		},
		data() {
			return{
			}
		},
		methods: {
			close(){
				this.$emit('close')
			},
			cancel(){
				this.$emit('cancel')
			},
			confirm(){
				this.$emit('confirm')
			},
		}
	}
</script>

<style lang="scss">
	.mark {
		position: fixed;
		width: 100vw;
		height: 100vh;
		background-color: rgba(0, 0, 0, 0.3);
		left: 0;
		bottom: 0;
		top: 0;
		right: 0;
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.bottom{
		position: absolute;
		bottom: 0 ;
		width: 100vw;
	}
	.center{
		width: 80vw;
		position: relative;
	}
	.content{
		background-color: #fff;
		border-radius: 20rpx;
		height: 400rpx;
		
		padding: 40rpx;
		box-sizing: border-box;
		
		.close{
			position:absolute;
			right:30rpx;
			top: 20rpx;
			width: 40rpx;
			height: 40rpx;
		}
		.title{
			text-align: center;
			font-weight: 600;
			height: 50rpx;
			line-height: 50rpx;
			margin-bottom: 20rpx;
		}
		.btns{
			bottom: 20px;
			position: absolute;
			display: flex;
			justify-content: space-between;
			width: 88%;
			.btn{
				width: 160rpx;
				height: 80rpx;
				text-align: center;
				line-height: 80rpx;
				border-radius: 20rpx;
			}
			.confirm{
				background: bisque;
			}
			.cancel{
				background: #ccc;
			}
		}
		
	}
</style>

注意:

本文CSS内容使用了scss语法,不使用的话可以将嵌套的样式拿出即可。

解释说明:

  • isShow 用于控制弹出层的显示与隐藏,在点击灰色空白区域和右上角关闭按钮,还有确定按钮与取消按钮之后都会关闭弹出层。
  • bottom 用于控制弹出层的显示位置,默认为居中显示
  • methods中向父组件传递了三个方法,分别是关闭弹窗,点击确定按钮,点击取消按钮
  • 使用具名插槽,在父组件中可以自定义插槽中的内容,方便不同位置的弹窗显示样式

2.2 父组件引用子组件

<template>
	<view class="container">
		<view class="btn" @click="open">
			显示弹出层
		</view>	
		<popup :isShow='visible' :bottom='true'  @close="closeMadle" @cancel="cancel" @confirm="confirm">
			<template v-slot:title>
				<view class="title">
					父组件自定义标题
				</view>
			</template>
			<template v-slot:body>
				<view class="body" >
					这里是父组件引用子组件,使用具名插槽编写的自定义内容和样式。
				</view>
			</template>
		</popup>
	</view>
	
</template>

<script>
	import popup from '../../components/popup.vue'
	export default {
		components: {
			popup
		},
		data() {
			return {
				visible:false,
			}
		},
		methods: {
			open(){
				this.visible = true
				uni.hideTabBar()
			},
			closeMadle(){
				this.visible = false
				uni.showTabBar()
			},
			confirm(){
				// 这里调用接口执行点击确定后的操作并关闭弹窗
				console.log('点击了确认按钮')
				this.visible = false
			},
			cancel(){
				// 点击了取消按钮直接关闭弹窗
				console.log('点击了取消按钮')
				this.visible = false
			},
		}
	}
</script>

<style lang="scss>
	.title{
		text-align: center;
		font-weight: 600;
		height: 50rpx;
		line-height: 50rpx;
		margin-bottom: 20rpx;
	}
	.body{
		font-size: 14px;
		font-weight: 600;
		color: darkorchid;
	}
</style>

注意:

  • 本文CSS内容使用了scss语法,不使用的话可以将嵌套的样式拿出即可。

解释说明:

  • 引用子组件,并在conponents中注册。
  • bottom 为true用于控制弹出层的弹窗在底部显示,不传默认为居中显示。
  • @语法接收子组件中向父组件传递的三个方法,在父组件methods中定义三个方法做相应的操作。
  • 使用具名插槽,自定义插槽中的内容。
  • uni.showTabBar() 和 uni.hideTabBar()两个方法用于控制原生tabbar的显示与隐藏。

3、效果图预览

3.1 不使用具名插槽的原有样式效果

3.2 使用具名插槽之后样式效果

这里是演示的那个显示在页面底部的弹窗,如果不需要直接将代码片段里的:bottom="true"删掉即可

总结

到此这篇关于小程序开发实战指南之封装自定义弹窗组件的文章就介绍到这了,更多相关小程序封装自定义弹窗组件内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

小程序开发实战指南之封装自定义弹窗组件的更多相关文章

  1. 微信小程序之html5 canvas绘图并保存到系统相册

    这篇文章主要介绍了微信小程序之html5 canvas绘图并保存到系统相册,需要的朋友可以参考下

  2. 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. 微信小程序多项选择器checkbox

    这篇文章主要为大家详细介绍了微信小程序多项选择器checkbox,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 微信小程序实现收缩式菜单

    这篇文章主要为大家详细介绍了微信小程序实现收缩式菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. 微信小程序自定义状态栏

    这篇文章主要为大家详细介绍了微信小程序自定义状态栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. 微信小程序实现简单的购物车功能

    这篇文章主要为大家详细介绍了微信小程序实现简单的购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. 微信小程序实现手机号码验证

    这篇文章主要为大家详细介绍了微信小程序实现手机号码验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue extend+promise封装全局弹窗组件

    这篇文章主要为大家详细介绍了vue extend+promise封装全局弹窗组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. 微信小程序预览二进制流文件的方法

    这篇文章主要为大家详细介绍了微信小程序预览二进制流文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部