小程序开发之模态框组件封装

yizhihongxing

小程序中常用的模态框组件包括原生的<modal>和现成的第三方插件,但是这些组件不够灵活且有些过于复杂。下面是一些关于模态框组件封装的完整攻略:

1. 创建弹窗组件

1.1 创建模态框文件夹及文件

在小程序开发工具中,我们可以通过右键菜单创建文件夹和文件。首先,我们需要在项目中新建一个文件夹components,然后在components文件夹中新建一个文件夹modal,并在modal文件夹中新建两个文件modal.wxmlmodal.wxss

1.2 模态框组件代码

modal.wxml中编写以下代码:

<view class="modal-mask" catchtap="hideModal"></view>
<view class="modal">
  <view class="modal-header">{{title}}</view>
  <view class="modal-body">{{content}}</view>
  <view class="modal-footer">
    <button class="modal-close" catchtap="hideModal">取消</button>
    <button class="modal-confirm" catchtap="confirm">确定</button>
  </view>
</view>

上面代码定义了一个模态框组件,包括遮罩层和弹窗部分。弹窗部分包含标题、内容以及底部按钮组。其中,titlecontent是组件的属性,通过外部传入,并在组件内部绑定显示的文本。底部按钮组包括取消和确认两个按钮,通过绑定catchtap事件触发外部的事件方法。

modal.wxss中编写以下代码:

.modal-mask {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 99;
}

.modal {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  max-width: 480rpx;
  border-radius: 6rpx;
  background-color: #fff;
  z-index: 100;
  overflow: hidden;
}

.modal-header {
  padding: 16rpx;
  font-size: 28rpx;
  font-weight: bold;
  text-align: center;
  color: #666;
}

.modal-body {
  padding: 24rpx;
  font-size: 32rpx;
  line-height: 1.6;
  color: #666;
}

.modal-footer {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  padding: 16rpx;
}

.modal-close,
.modal-confirm {
  width: 48%;
  height: 88rpx;
  border: none;
  border-radius: 6rpx;
  font-size: 28rpx;
  color: #fff;
}

.modal-close {
  background-color: #999;
  opacity: 0.8;
}

.modal-confirm {
  background-color: #00a5e9;
  opacity: 0.8;
}

上面代码设置了模态框组件的样式,包括遮罩层、弹窗和底部按钮的样式。

1.3 模态框组件js代码

modal.js中编写以下代码:

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    title: {
      type: String,
      value: '提示'
    },
    content: {
      type: String,
      value: ''
    },
    show: {
      type: Boolean,
      value: false
    }
  },

  /**
   * 组件的初始数据
   */
  data: {},

  /**
   * 组件的方法列表
   */
  methods: {
    hideModal: function() {
      this.setData({
        show: false
      })
    },

    confirm: function() {
      this.triggerEvent('confirm')
      this.hideModal()
    }
  }
})

上面代码定义了模态框组件的属性和方法,包括设置标题、内容和显示状态的属性以及隐藏组件和确认按钮的事件方法。其中,triggerEvent用于触发自定义事件,可以在外部使用bind:confirm绑定事件。

2. 使用弹窗组件

2.1 在页面中使用组件

在需要使用弹窗组件的页面中,需要先引入组件:

<import src="../../components/modal/modal.wxml" />
<template is="modal" data="{{...modal}}" />

上面代码引入了modal组件的wxml文件,并使用template标签来调用组件并传入相应的属性。

2.2 引入组件js代码

在需要使用弹窗组件的页面的js文件中,需要先引入组件:

import modal from '../../components/modal/modal'

然后在data中定义modal属性,并在需要显示弹窗的方法中设置modal属性的值:

data: {
  modal: {}
},

showModal: function() {
  this.setData({
    'modal.show': true,
    'modal.content': '确定要删除数据?'
  })
},

confirm: function() {
  console.log('确认删除')
}

上面代码使用了setData方法设置modal属性的值,包括设置显示弹窗和传入内容。在确认按钮的事件方法中,可以触发confirm事件。

示例1:

<import src="../../components/modal/modal.wxml" />
<template is="modal" data="{{...modal}}" />

<view class="page">
  <button class="btn" bindtap="showModal">显示弹窗</button>
</view>
import modal from '../../components/modal/modal'

Page({
  data: {
    modal: {}
  },

  onLoad: function() {
    this.setData({
      'modal.title': '提示',
      'modal.confirmText': '确认删除'
    })
  },

  showModal: function() {
    this.setData({
      'modal.show': true,
      'modal.content': '确定要删除数据?'
    })
  },

  confirm: function() {
    console.log('确认删除')
  }
})

示例2:

<import src="../../components/modal/modal.wxml" />
<template is="modal" data="{{...modal}}" />

<view class="page">
  <button class="btn" bindtap="showModal">显示弹窗</button>
</view>
import modal from '../../components/modal/modal'

Page({
  data: {
    modal: {}
  },

  onLoad: function() {
    this.setData({
      'modal.title': '提示',
      'modal.confirmText': '确认'
    })
  },

  showModal: function() {
    this.setData({
      'modal.show': true,
      'modal.content': '确定要提交数据?'
    })
  },

  confirm: function() {
    console.log('确认提交')
  }
})

上面代码中的示例1示例2都是在页面中引入了modal组件,并在方法中设置了modal属性的值,可以根据实际需求来设置弹窗的标题和内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:小程序开发之模态框组件封装 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Mybatis-Plus 条件构造器示例详解

    Mybatis-Plus 条件构造器示例详解 Mybatis-Plus 是一个基于 Mybatis 的增强工具,提供了更加便捷的数据库操作方式。其中,条件构造器是 Mybatis-Plus 的一个重要特性,它可以帮助我们动态地构建 SQL 查询条件。 1. 基本概念 条件构造器是 Mybatis-Plus 提供的一种链式调用方式,用于构建 SQL 查询条件。…

    other 2023年7月28日
    00
  • Android 自定义View步骤

    下面是自定义View的完整攻略: 一、思路和准备 在自定义View之前,我们需要先明确自己的需求。根据需求,我们可以考虑使用已有的View来实现,如果已有的View不能满足我们的需求,则需要自己来实现一个自定义View。 然后我们需要对要实现的自定义View进行分析,考虑需要绘制哪些内容、需要支持哪些属性等,制定好自己的计划。 接下来,我们需要准备好一些工具…

    other 2023年6月25日
    00
  • 电脑磁盘空间不足怎么办?有什么好的解决方法

    电脑磁盘空间不足的解决方法 当你的电脑磁盘空间不足时,可以采取以下措施来解决这个问题。下面是一个详细的攻略,包含了两个示例说明。 1. 清理磁盘空间 清理磁盘空间是解决电脑磁盘空间不足问题的第一步。你可以通过以下方法来清理磁盘空间: 删除不必要的文件和程序:浏览你的电脑,找到不再需要的文件和程序,并将其删除。这些文件可能包括旧的下载文件、临时文件、垃圾桶中的…

    other 2023年8月1日
    00
  • electron打印

    Electron 打印攻略 Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架,它可以使用 HTML、CSS 和 JavaScript 构建桌面应用程序。在攻略中,我们将介绍如何在 Electron 应用中实现打印功能,并提供两个示例说明。 打印功能 Electron 提供了一个名为 webContents 的模块,它用于控制应用程序窗口…

    other 2023年5月6日
    00
  • powerbi度量值分组统计

    powerbi度量值分组统计 介绍 Power BI 是一款功能强大的商业智能工具,可用于将数据直观地进行可视化呈现和数据分析。在 Power BI 应用程序中,可以使用各种可视化工具显示数据,如图表、仪表板、报表和地图等。 Power BI 提供了一个功能-视觉化度量,可以用于展示度量的值。但有时候需要将度量值按照一定条件进行分组统计,以更好地展示数据的特…

    其他 2023年3月28日
    00
  • 在layui中实现开关按钮的效果实例

    以下是关于“在layui中实现开关按钮的效果实例”的完整攻略: layui开关按钮 layui是一款轻量级前端UI框架,提供了丰富的组件和工具,其中包括开关按钮组件。layui的开关按钮组件可以用于实现开关按钮的效果。 示例一:基本用法 以下是一个基本用法的示例,演示了如何在layui中实现开关按钮的效果: <!DOCTYPE html> &lt…

    other 2023年5月9日
    00
  • Vue 3.0双向绑定原理的实现方法

    Vue 3.0中的双向数据绑定是通过数据响应式系统实现的,下面我们将详细讲解Vue 3.0双向绑定原理的实现方法。 数据响应式系统的基本原理 Vue 3.0中的响应式系统依赖于ES6的Proxy对象,通过对数据进行代理,实现数据的监听和数据更新时的通知。 当我们在模板中使用数据时,Vue 3.0会对这些数据进行代理,并且将这些数据与一个虚拟节点VNode进行…

    other 2023年6月26日
    00
  • 如何禁止内部viewpager滑动

    当然,我很乐意为您提供有关“如何禁止内部ViewPager滑动”的完整攻略。以下是详细的步骤和两个示例: 1 如何禁止内部ViewPager滑动 在Android应用程序中,有时需要在一个ViewPager中嵌套另一个ViewPager。但是,有时您可能需要禁止内部ViewPager滑动。以下是实现此目的的步骤: 1.1 创建自定义ViewPager 首先,…

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部