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

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

前言:

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

本片文章主要讲的是,使用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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!  


目录
相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
4天前
|
小程序 云计算 Android开发
发者社区 云计算 文章 正文 小程序开发与公众号用户关联推送消息(九)
发者社区 云计算 文章 正文 小程序开发与公众号用户关联推送消息(九)
18 3
|
10天前
|
小程序
|
1月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
204 3
|
1月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
48 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
104 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
100 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
3月前
|
存储 小程序 JavaScript
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
62 7

热门文章

最新文章