【小程序开发】—— 封装自定义弹窗组件

简介: 【小程序开发】—— 封装自定义弹窗组件

前言:

大家好我是不苒,本人男,头像是女朋友照片,很多大佬都以为我是女的,浅浅的解释一下哈哈。很高兴书写博客与大家分享知识。

本片文章主要讲的是,使用uniapp开发背景下,使用Vue的具名插槽封装一个自定义的弹窗组件popup,感兴趣的小伙伴可以学习一下,如果发现本人编写有问题的话,欢迎大家随时来评论区探讨支出问题,我也会及时更正的。


话不多说直接上正文一起来学习一下封装自定义弹窗组件吧!


正文

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"删掉即可


专栏分享:

小程序项目实战专栏:《uniapp小程序开发》

前端面试专栏地址:《面试必看》


⏳ 名言警句:说能做的,做说过的 \textcolor{red} {名言警句:说能做的,做说过的} 名言警句:说能做的,做说过的


✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下


👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!


⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!


✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!  


目录
相关文章
|
24天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
30天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
73 0
|
2月前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
28天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
26 0
|
26天前
|
小程序 前端开发 关系型数据库
基于Uniapp+php校园小程序,校园圈子论坛系统功能,校园跑腿二手交流功能设计
校园圈子论坛及综合服务平台集成了校园跑腿、兼职信息、外卖团购、闲置交换、租赁服务、表白墙等多功能模块,提供一站式校园生活解决方案。系统采用uniapp前端和PHP后端开发,支持多城市、多学校切换,配备分站式后台管理,确保稳定性和安全性。通过融云IM SDK实现即时通讯功能,增强用户互动与粘性。适用于大学校园、城市及社区圈子,满足多样化需求,提升便捷体验。
|
1月前
|
移动开发 小程序 前端开发
超详细攻略!uniapp陪玩系统,打包陪玩小程序、H5需要注意什么?
陪玩系统的打包过程涵盖APP、小程序和H5平台。APP打包需使用uni-app开发工具,配置项目信息并选择云打包;小程序打包需在微信公众平台注册账号并提交审核;H5打包则直接通过uni-app生成文件并上传至服务器。各平台需注意权限配置、代码规范及充分测试,确保应用稳定性和兼容性。
|
3月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
79 0
在线课堂+工具组件小程序uniapp移动端源码
|
4月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
562 3
|
4月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
95 0
微信小程序更新提醒uniapp
|
6月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
155 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目

热门文章

最新文章