热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序自定义组件Component总结

没有看过微信小程序自定义组件(以下称Component)的同学可以到官网上了解一下。以下是对Component的总结:一、Component概念Componen

没有看过微信小程序自定义组件(以下称Component)的同学可以到官网上了解一下。

以下是对Component的总结:

一、Component概念

Component像页面一样由wxml、wxss、js和json4个文件组成,且需要把这4个文件放在同一个目录中。与页面不一样的是,Component中的构造函数(也可以称构造器)是Component({}),而页面中的构造函数是Page({})。

二、slot

Component的slot(slot意思是插槽),主要是让你在外部的wxml可以自由的在你的Component的wxml里插入模块。大家可以在https://github.com/zhu12345618/slotDemo查看实例。

还有一个实例是是Component接受外部样式的,官网中有例子。

三、Component构造器

在Component构造器中需要注意的几个属性是:properties、data、methods。

其他的:如果是属性的话,感觉用到的不多,所以就不说了;如果是函数,则都是Component的生命周期函数,官网上即可了解得很清楚。

1. properties:对外属性,即如果外部的wxml文件传入数据时,会把数据设置成properties的属性。

如官网例子的index.wxml:


这个"my-property"即对应custom-component.js里properties属性的myProperty,修改my-property就是修改myProperty。

custom-component.js如下:


  1. Component({

  2.  
  3. behaviors: [],

  4.  
  5. properties: {

  6. myProperty: { // 属性名

  7. type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)

  8. value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个

  9. observer: function (newVal, oldVal) { } // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'

  10. },

  11. myProperty2: String // 简化的定义方式

  12. },

  13. data: {

  14. A: [{

  15. B: 'init data.A[0].B'

  16. }]

  17. }, // 私有数据,可用于模版渲染

  18.  
  19. // 生命周期函数,可以为函数,或一个在methods段中定义的方法名

  20. attached: function () { },

  21. moved: function () { },

  22. detached: function () { },

  23.  
  24. methods: {

  25. onMyButtonTap: function () {

  26. this.setData({

  27. // 更新属性和数据的方法与更新页面数据的方法类似

  28. myProperty: 'Test'

  29. })

  30. },

  31. _myPrivateMethod: function () {

  32. // 内部方法建议以下划线开头

  33. this.replaceDataOnPath(['A', 0, 'B'], 'myPrivateData') // 这里将 data.A[0].B 设为 'myPrivateData'

  34. this.applyDataUpdates()

  35. },

  36. _propertyChange: function (newVal, oldVal) {

  37.  
  38. }

  39. }

  40.  
  41. })

但是!小程序有一个问题:是如果properties中的属性是带有数字的,如:myProperty2,这样wxml里对应的就是my-property2,但是这样程序会报错,希望小程序以后可能修复这个问题。

2. data:这里的data和页面中的data是一致的,但是这里的data只在组件内部使用。

Tips:properties和data里的属性不能一样,否则会有冲突。

3. methods:组件中的方法都是在这个对象里定义。

四、组件与外部通信事件

上面的"myProperty"是父节点设置数据到组件里,组件传数据到父节点是用事件的方式。

注册事件,index.wxml和index.js:


  1. 这里是插入到组件slot中的内容

  2.  

监听事件:


  1. Page({

  2. data: {

  3.  
  4. },

  5. onLoad : function() {

  6. console.log(this.selectComponent("#test"));

  7. },

  8. myEventListener: function(e) {

  9. console.log("Event in index")

  10. }

  11. })

 

发射事件component-tag-name.wxml和component-tag-name.js:



  1. // components/component-tag-name.js

  2. Component({

  3. properties: {},

  4. methods: {

  5. onTap: function () {

  6. var myEventDetail = {} // detail对象,提供给事件监听函数

  7. var myEventOption = {} // 触发事件的选项

  8. this.triggerEvent('myevent', myEventDetail, myEventOption)

  9. }

  10. }

  11. })

源代码官网里有,也可以在https://github.com/zhu12345618/componentEventTest下载。

五、组件通信的最后大招

如果以上通信还不能满足需求,可以用this.selectComponent("#test"),这个方法需要传一个id号。

注意上面的index.wxml中有一个代码是id="test",这样定义之后,就可以在js文件中用this.selectComponent("#test")获取到这个组件了。

 

最后,Component还有behaviors、组件关系、抽象节点等特性,但是对于一般的需求来说,不经常用到,所以就不作总结了。如果需要了解的话,可以去官网学习。

以上是本人的一点小总结,如有不足之处,还请各位指正!


推荐阅读
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • PHP图床源码:集成化图床管理系统解决方案
    本项目提供了一套集成化的图床管理系统解决方案,适用于需要高效管理图片资源的场景。系统结构简洁,无需复杂的后台支持。主要文件包括 `huluxia.php`、`index.html`、`inews.php`、`kw.php` 和 `zz.php`,每个文件都承担了特定的功能,确保系统的稳定运行和易用性。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
author-avatar
坐在河边的蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有