小程序组件化开发

2023-10-27

前言

    随着小程序的普及,越来越多的开发者开始使用小程序进行开发,而小程序的组件化开发已经成为了一种标配的开发模式。本文将深入介绍小程序组件化开发的相关知识,包括组件的定义、生命周期、通信和使用等方面,帮助大家更好地理解和使用小程序的组件化开发模式。

组件的定义

组件是小程序中的一个重要概念,它能够将页面分解成独立的、可复用的部分,以便于开发和维护,组件可以包含一些特定的功能和样式,同时也能够接受外部的数据和事件。

    在小程序中,组件是通过Component构造函数来定义的。一个组件通常由三个部分组成:propertiesdatamethods。其中,properties用于定义组件的对外接口,data用于定义组件的内部数据,methods用于定义组件的方法。示例代码如下:

Component({
  properties: {
    // 定义组件的属性
    title: {
      type: String,
      value: '默认标题'
    }
  },
  data: {
    // 定义组件的内部数据
    count: 0
  },
  methods: {
    // 定义组件的方法
    handleClick() {
      this.setData({
        count: this.data.count + 1
      })
      this.triggerEvent('click', { count: this.data.count })
    }
  }
})

    定义了一个名为my-component的组件,它包含一个title属性、一个count数据和一个handleClick方法。其中,properties中定义了title属性的类型为String,默认值为默认标题;data中定义了count初始值为0;methods中定义了handleClick方法,可以修改count,并触发click事件。triggerEvent方法用于触发组件的自定义事件。

组件的生命周期

组件的生命周期是指组件从创建到销毁的整个过程,包括组件的创建、更新和销毁等阶段,小程序提供了一些钩子函数,用于在不同的生命周期阶段执行一些特定的操作。以下是小程序组件的生命周期及其钩子函数:

created:组件实例刚刚被创建时触发,此时组件的属性和方法还未初始化;

attached:组件被添加到页面节点树时触发,此时组件的属性和方法已经初始化;

ready:组件渲染完成时触发,此时组件已经可以和用户进行交互;

moved:组件被移动到另一个节点时触发;

detached:组件被从页面节点树移除时触发。
示例代码如下:

Component({
  created() {
    console.log('组件实例被创建')
  },
  attached() {
    console.log('组件被添加到页面节点树')
  },
  ready() {
    console.log('组件渲染完成')
  },
  moved() {
    console.log('组件被移动到另一个节点')
  },
  detached() {
    console.log('组件被从页面节点树移除')
  }
})

当然除了这些,小程序组件还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义。其中可用的生命周期包括以下几种:
在这里插入图片描述
注意:自定义 tabBar 的 pageLifetime 不会触发。

Component({
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

组件的通信

组件之间的通信是小程序开发中的一个重要问题,它涉及到组件之间的数据传递和事件触发等方面

事件传递

小程序中可以通过事件传递实现组件之间的通信。事件传递是指一个组件向其父组件或子组件发送事件,另一个组件则监听该事件并进行相应的处理。在事件触发时,可以将数据作为参数传递给另一个组件。通过这种方式,组件之间可以实现数据的传递和处理。小程序官方提供了一些事件传递的示例代码,如下所示:

// 子组件向父组件传递事件
// 子组件中定义事件
Component({
  methods: {
    onTap: function () {
      this.triggerEvent('myevent', {data: 'hello'}, {})
    }
  }
})
// 父组件中监听子组件事件
<child-component myevent="{{myevent}}"/>
// 父组件中定义事件处理函数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
  }
})
// 父组件中监听子组件事件
<child-component bind:myevent="handleEvent"/>
// 父组件中定义事件处理函数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
  }
})
// 父组件中监听子组件事件,并传递额外的参数
<child-component bind:myevent="handleEvent" data-extra="extra"/>
// 父组件中定义事件处理函数,获取额外的参数
Page({
  handleEvent: function (e) {
    console.log(e.detail) // 输出 {data: 'hello'}
    console.log(e.currentTarget.dataset.extra) // 输出 extra
  }
})

共享数据

小程序中可以使用 getApp() 方法获取 App 实例,从而在不同的页面和组件之间共享数据。具体的做法是在 App 实例中定义一个全局的数据对象,在需要访问这个数据对象的页面和组件中使用 getApp() 方法获取 App 实例,并通过 this.globalData 访问全局数据对象。共享数据的示例如下所示:

// app.js 中定义全局数据对象
App({
  globalData: {
    userInfo: null
  }
})
// page1.js 中设置数据
const app = getApp()
Page({
  onLoad: function () {
    app.globalData.userInfo = {name: 'Tom'}
  }
})
// page2.js 中获取数据
const app = getApp()
Page({
  onLoad: function () {
    console.log(app.globalData.userInfo) // 输出 {name: 'Tom'}
  }
})

自定义事件

小程序中可以使用自定义事件实现组件之间的通信。自定义事件是指通过事件中心实现组件之间的通信。一个组件可以触发一个自定义事件,而其他组件可以监听这个事件并进行相应的处理。通过这种方式,组件之间可以实现更加灵活的通信。自定义事件的示例代码:

// event.js 中定义事件中心
const eventBus = {}
// 定义事件监听函数
eventBus.on = function (eventName, callback) {
  if (!this[eventName]) {
    this[eventName] = []
  }
  this[eventName].push(callback)
}
// 定义事件触发函数
eventBus.emit = function (eventName, data) {
  if (this[eventName]) {
    this[eventName].forEach(function (callback) {
      callback(data)
    })
  }
}
// page1.js 中触发事件
const eventBus = require('event.js')
Page({
  onTap: function () {
    eventBus.emit('myevent', {data: 'hello'})
  }
})
// page2.js 中监听事件
const eventBus = require('event.js')
Page({
  onLoad: function () {
    eventBus.on('myevent', function (data) {
      console.log(data) // 输出 {data: 'hello'}
    })
  }
})

    小程序组件之间的通信方式有很多种,根据具体的需求选择合适的方式是非常重要的。同时,也需要注意避免过度使用全局数据和事件传递,以避免出现数据不一致和代码混乱的情况。在实际开发中,我们应该根据具体的场景选择合适的通信方式

以上便是要讲的全部内容了,希望可以帮到大家,欢迎各位留言交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序组件化开发 的相关文章

  • vue的组件

    在Vue中 组件是可复用的代码块 用于构建用户界面 Vue的组件系统允许您将界面拆分为独立的 可重复使用的部件 提供了更好的代码组织和复用性 以下是在Vue中创建组件的基本步骤 创建一个组件实例 可以使用Vue extend 方法创建一个V
  • uni.ownloadFile下载下来的文件没有后缀名

    let filepathss plus io convertLocalFileSystemURL data tempFilePath plus io resolveLocalFileSystemURL filepathss function
  • Firefox浏览器-渗透测试插件推荐

    在日常工作中可能需要一些浏览器插件辅助我们做工作 下面是比较好的 当然不一定对你有用 找到适合自己的即可 FoxyProxy FoxyProxy是一个高级的代理管理工具 它完全替代了Firefox有限的代理功能 它提供比SwitchProx
  • Typecho 最新XC主题 去除域名授权全解密源码

    简介 Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题 首页支持六种主题样式 支持Pjax优化访问速度 多种单页 如友链 说说等 评论支持表情 自定义编辑器 支持其他样式功能 该主题功能性挺高 比较花里胡哨 感觉有一
  • AI壁纸画展头像表情包流量主微信抖音小程序开源版开发

    AI壁纸画展头像表情包流量主微信抖音小程序开源版开发 以下是AI壁纸画展头像表情包流量主微信抖音小程序开源版的开发功能列表 用户注册和登录 实现用户注册和登录功能 包括手机号登录 第三方登录等方式 图片上传和展示 用户可以上传自己的图片或选
  • CTF之逆向入门

    逆向工程 Reverse Engineering 又称反向工程 是一种技术过程 即对一项目标产品进行逆向分析及研究 从而演绎并得出该产品的处理流程 组织结构 功能性能规格等设计要素 以制作出功能相近 但又不完全一样的产品 逆向工程源于商业及
  • 如何创建微信小程序?高效实现你的创意

    在数字化浪潮下 微信小程序以其便捷高效的特点逐渐成为人们日常生活与商业活动的重要载体 有很多人却被难住 若没有没有编程经验 如何创建微信小程序 答案是通过合理利用工具 让创意迅速落地为功能完备的小程序 一 前期准备阶段 1 注册微信公众号平
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 【计算机毕业设计】微信小程序反诈科普平台

    相比于以前的传统手工管理方式 智能化的管理方式可以大幅降低反诈科普平台的运营人员成本 实现了反诈科普平台的标准化 制度化 程序化的管理 有效地防止了反诈科普平台的随意管理 提高了信息的处理速度和精确度 能够及时 准确地查询和修正反诈科普 一
  • HTML概述、基本语法(表格整理、标签、基本结构)

    一 HTML概述 HTML指的是超文本标记语言 超文本 是指页面内可以包含图片 链接 声音 视频等内容 标记 标签 通过标记符号来告诉浏览器页面该如何显示 我们可以打开浏览器 右击页面 点击 查看网页源代码 来方便了解HTML标签通过浏览器
  • 点击存储到固定时间清除存储

    这段代码 无意间想到的 随便写了下来 运行 根据点击之后传递一个参数 将他存入本地存储 方便测试为10秒 10秒后触发下一个事件 清除本地存储 结束
  • 低代码-添加按钮组件设计

    效果图 可拆分为以下细节 按钮列表 删除 两个操作需同步删除 点击外侧删除 点击复选框删除 添加 点击复选框添加 示例代码 技术栈 vue3 arco design ts less tailwindcss
  • 微信小程序|SSM微信小程序的学生选课系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • APP开发毕业设计|ssm爱心小屋公益机构智慧管理APP

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数
  • Vue中下载不同文件常用的方式

    1 使用window open方法下载文件
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef

随机推荐

  • 安装虚拟机提示“无法安装服务VMAuthdService”,请确保您有足够的权限安装系统服务

    以下内容仅供参考 我的情况是 1 Win7 安装过VM12 2 无法安装服务VMAuthdService 3 服务 中 VMAuthdService这项没有消失 不排除仅 以管理员 尝试 net stop VMAuthdService ta
  • cas-overlay-template-5.3 集成Oauth2.0

    第一步 在pom xml 文件添加oauth2 0协议支持
  • 创建第一款iPhone应用程序

    现在让我们来创建一个在iOS模拟器上运行的简单视图应用 空白的应用程序 操作步骤如下 1 打开Xcode并选择创建一个新的Xcode项目 2 然后选择单一视图应用程序 3 接下来输入产品名称即应用程序名称 组织名称和公司标识符 4 确定已经
  • reid数据集

    https blog csdn net qiuchangyong article details 82219775 最近一段时间在做行人重识别方向的研究 行人重识别 Person Re Identification 作为图像识别领域的一个分
  • python中super()出现的TypeError: must be type, not classobj

    python中super 只能应用于新式类 而不能应用于经典类 否则会出现报错 TypeError must be type not classobj Python 2 x中默认都是经典类 只有显式继承了object才是新式类 Python
  • 【ROS机器人系统】自主导航+YOLO目标检测+语音播报

    文章目录 注意事项 一 总体功能设计 二 实验环境 三 演示 四 场景搭建 建图与导航模块 4 1 场景搭建 4 2 小车模型 4 3 导航模块 1 安装依赖 2 从github下载的文件中的test ws目录下 3 运行导航功能 五 YO
  • 图像标签Day02

    1 常见的图像格式 JGP GIF PNG BPM位图 img src resources image 图像标签 jpg alt 基神头像 title 基基哥 width 8
  • springcloud配置nacos启动报错

    报错1 2022 06 09 22 07 27 934 ERROR 15656 main c a cloud nacos NacosConfigProperties create config service error propertie
  • python把路径中反斜杠'\'变为'/'

    windows文件的路径是按反斜杠 分开的 例如 C ProgramData Microsoft Windows Start Menu Programs Xmanager 5 linux总文件路径是使用 分开 例如 home usernam
  • ubutu虚拟机和主机共享同一网络

    ubutu虚拟机和主机共享同一网络 前言 一 使用场景 二 vmware设置 三 主机windows设置 四 虚拟机ubuntu配置 前言 本文采用的是共享同一网卡的方式达到虚拟机使用和主机一样的网络的目的 主要参考了虚拟机共享主机网卡连接
  • loading加载

  • 浅谈 axios ajax fetch

    原生ajax 创建异步对象 var xhr new XMLHttpRequest 设置请求基本信息 并加上请求头 xhr setRequestHeader Content type application x www form urlenc
  • 2014年底总结

    这是第一次写年底总结 其实每年一直都有年底写总结的想法 可总是手头的事情很多 最终计划赶不上变化 最后写总结的想法就不了了之了 今天手头上没有什么工作 趁着现在有些空闲的时间 赶紧开始动笔了 其实很多事情不是没时间做 而是我们的惰性成功了
  • 图像处理那些算法

    图像的几何变换 1 旋转 借助矩阵运算来实现图像的旋转功能 2 平移 借助矩阵运算来实现图像的旋转功能 3 对称 借助矩阵运算来实现图像的对称功能 水平镜像变换 垂直镜像变换 图片裁剪 借助 get gca currentPoint 获取鼠
  • Liunx - 安装maven

    一 使用步骤 1 下载安装 maven官网 https maven apache org download cgi 上传至云服务中 我使用的连接工具 MobaXterm Personal 一键上传 选择你要安装的路径新建maven文件夹 新
  • 【软件测试】软件测试方法之黑盒测试方法和白盒测试

    白盒测试方法 一 概念 白盒测试也称结构测试或逻辑驱动测试 是针对被测单元内部是如何进行工作的测试 它根据程序的控制结构设计测试用例 主要用于软件或程序验证 它可以形象得用下图表示 二 白盒测试方法应该遵循的原则 保证一个模块中的所有独立路
  • exif-js读取图像的元数据(以取经纬度、方位角为例)

    参考文档 安装 npm install exif js save 引用 import EXIF from exif js 使用 EXIF getData document getElementById imgElement function
  • vue聊天功能模块(九)艾特功能实现

    预览 艾特开始 思路 输入ctrl 弹出群成员列表弹框 点击成员时 把成员名称添加到输入框 同时隐藏弹框 1 点击弹框外任意位置 把弹框关闭即可 2 点击删除键时 把 和名称删掉 3 要实现艾特提示 输入框显示的是 某某某 实际发出去的消息
  • HttpClient 之 发送Https请求

    HttpClient包是一个优秀的Http请求的开源jar 本文Http工具类的封装基于HttpClient 封装后的工具类支持Https请求 但是由于项目的需要快速的实现 以下代码还可能会有点过时 但是要是可行的 并且相对比较简单 1 实
  • 小程序组件化开发

    前言 随着小程序的普及 越来越多的开发者开始使用小程序进行开发 而小程序的组件化开发已经成为了一种标配的开发模式 本文将深入介绍小程序组件化开发的相关知识 包括组件的定义 生命周期 通信和使用等方面 帮助大家更好地理解和使用小程序的组件化开