微信小程序 | 小程序组件化开发

简介: 微信小程序 | 小程序组件化开发

一、小程序组件化思想

小程序组件化开发

  • 小程序刚推出时是不支持组件化的,也是为人诟病的一个点
  • 从1.6.3开始,便支持自定义组件开发了,也让我们更加方便在程序中使用组件化

e871a502ecbb4006938482a86dd66d49.png

  • 组件化思想的应用:
  • 我们在之后的开发中可以充分利用它
  • 尽可能将页面拆成一个个 小的、可复用的组件
  • 这会让我们的代码更加 方便组织管理,并且拓展性更强

二、自定义组件的过程

创建一个组件

  • 类似于页面,自定义组件由 json wxml wxjj js 四个文件组成
  • 先在根目录下创建一个文件夹;
  • components里存放 自定义的公共组件
  • 常见的一个自定义组件 section-info: 包含对应的四个文件

d9752f45c97041f995b8fe29a603fb63.png

fff49e53d6cd40999e60ad4a1f705981.png

  • 自定义组件步骤
  • 需要在json文件中进行 自定义组件声明(将component字段设置为true 可以讲这一组文件设为自定义组件(当你在文件中设置了这个属性之后,那么它将是一个组件)

68c1108aacec438e92eddcb4c844a810.png

f246d6b87e8c4e9f8efd91328fe6027b.png

  • 在wxml中编写属于自定义组件自己的模板
  • 在wxss中编写属于自己的样式
  • 在js文件中,定义数据或组件内部的相关逻辑代码

9db96facaaa54f7ab13b4898256a2557.png

  • 在哪个组件中想要使用自定义组件,那么就在哪个里面的json文件中进行书写.

使用自定义组件和细节注意事项

  • 自定义组件也是可以引用自定义组件的,引用方法类似于页面引用自定义组件的方式(使用usingComponents 字段)
  • 自定义组件和页面所在项目根目录 名 不能以“wx-”为前缀,否则会报错
  • 如果在app.json的usingComponents声明某个组件,那么所有页面和组件可以直接使用该组件

74e297f45d3d48aeb9a193d763366b24.png

三、组件样式实现细节

组件的样式细节

  • 组件内的样式 对 外部样式 的影响
  • 组件内的class样式 只对组件wxml内的节点生效,对于引用组件的Page页面不生效
  • 组件内不能使用id选择器,属性选择器,标签选择器(会对其他组件进行样式更改)
  • 外部样式 对 组件内样式 的影响
  • 外部使用class的样式,只对外部wxml的class生效,对组件内的无效
  • 外部使用id选择器,属性选择器不会对组件内产生影响
  • 外部使用了 标签选择器 会对组件内产生影响
  • 如何让class可以相互影响?
  • 在Component对象中 可以传入一个 options属性, 其中options属性中有一个 styleIsolation(隔离)属性.
  • stylelsolation有三个取值:
  • Isolated 启用样式隔离,在自定义组件内外,使用class指定的样式将不会相互影响(默认值)
  • Apply-shared 页面wxss样式将影响到自定义组件 但自定义组件中的wxss中指定的样式不影响页面
  • Shared 页面wxss样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置

e0e9dc84916a49ad8c73f46bf6a517f3.png

四、组件使用过程通信

组件的通信

很多情况下,组件内展示的内容(数据、样式、标签),并不是在组件内写死的,而且可以由使用者来决定.

d282e1017a5943fc989037713136f46d.png

向组件传递数据 - properties

  • 给组件传递数据:
  • 大部分情况下,组件只负责布局和样式,内容由使用组件的对象 决定的
  • 我们经常需要从外部传递数据给我们的组件,让我们的组件来进行展示
  • 如何传递? => 使用 properties属性
  • 支持的类型:
  • String Number Boolean
  • Object Array null(不限制类型)
  • 默认值:
  • 通过value来设置

ea4e9bd9d7734ea9a22f3c048a1d9e67.png

9ccdf8f387fa4de4941ab26229bf1e36.png

向组件传递样式 -  externalClasses(较少使用)

  • 给组件传递样式:
  • 我们不希望将样式写在组件内固定不变,而是通过外部来决定样式
  • 这时,我们可以使用externalClasses 属性:
  • 1.在Component对象中,先定义externalClasses属性

fd96795c9a0d45d8ae8b638fe1921bca.png

  • 2.在组件内的wxml中使用externalClasses属性中的class

b5603ea3d2004dce8136ac22bedb3a4e.png

  • 3.在页面中传入对应的class,并且给这个class设置样式


ed9508c3d4b34284b3812b0d05e55d93.png    d07abce1c5d643319a76d9812e0e755d.png

组件向外传递事件 – 自定义事件

有时候是自定义组件内部发生了事件,需要告知使用者,这个时候可以使用自定义事件:

53d761e763c445738beec487159f69fc.png

页面直接调用组件方法(使用的较少)

  • 可以在父组件里调用 this.selectComponent,获取子组件的实例对象
  • 调用时需要传入一个匹配选择器 selector,如:this.selectComponent(".my-component")。

e72fb1f2bceb4ad69b274a675c9453e5.png

48d694b931f84a96be6432ce3078d327.png

9a0e9716803b4ada9cca33f320b1661f.png

五、组件插槽定义使用

什么是插槽?

  • 组件的插槽
  • 为了让我们封装的组件更加具有拓展性
  • 让使用者可以决定组件内部的一些内容到底展示什么?


单个插槽的使用

  • 除了内容和样式可能由外界决定之外,也可能外界想决定显示的方式
  • 如:我们有一个组件定义了头部和尾部,但是中间的内容可能是一段文字,可能是图片,等等...
  • 在不确定外界想插入什么其他组件的前提下,我们可以在组件内预留插槽:

719b0949faab4fc6af885bcb85e1892a.png     55127d49c5f2460287d5a313f4523724.png

这里有一个小问题,如图所示, 小程序中 插槽是不能设置默认值的 那么我们怎么去解决呢?

使用 css中的 :empty

bcc3033413614a72a85b736ffd399cf4.png

JavaScript
// 代码展示
//   插槽代码
<view class="my-slot">
  <view class="header">Header</view>
  <view class="content">
    <!-- <view>哈哈哈哈</view> -->
    <!-- 预留插槽 -->
    <!-- 在小程序中,插槽是不支持默认值的 -->
    <slot>哈哈哈哈</slot>
  </view>
  <!-- 我如果想要我没有写插槽 也有一个默认值怎么办呢? 自己动手  我得让我这个 哈哈哈 在有插入东西时不显示
  没有插入东西的时候 显示 css中实现 -->
  <view class="default">哈哈哈哈</view>
  <view class="footer">Footer</view>
</view>
//  index.wxml中代码
<!-- 1.单个插槽的使用 -->
<my-slot>
  <button>我是按钮</button>
</my-slot>
<my-slot>
  <!-- 插入图片 -->
  <image src="/assets/tabbar/home.png" mode="widthFix"></image>
</my-slot>
<my-slot></my-slot>
<my-slot></my-slot>
// css中代码
.default {
  display: none;
}
/* 可以使用兄弟选择器 */
/* :empty 表示 当前元素内容为空的 */
.content:empty + .default {
  display: block;
 } 

多个插槽的使用

  • 有时候为了让组件更加的灵活,我们需要定义多个插槽:

0e99b0b50cb448d0abda94cc67a6ad61.png    0f1054df059347e4bea879984d0d9415.png    d902e8f0a0c3436780978b72945d6930.png

behaviors

  • behaviors 是用于组件间代码共享的特性,类似于一些编程语言中的  mixins
  • 每个 behavior 可以包含一组属性、数据、生命周期函数和方法
  • 组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用
  • 每个组件可以引用多个 behavior behavior 也可以引用其它 behavior

6d3cac59cf954554b2444eddf6ff20e2.png    508a5e2c251a44b5aa2b0087ca159a5f.png

组件的生命周期

  • 组件的生命周期,值 组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被触发.
  • 最重要的生命周期是 created attached detached 包含一个组件实例生命周期流程的最主要时间点
  • 小程序基础库版本 2.2.3 起,组件的的生命周期也可以在 lifetimes 字段内进行声明(这是推荐的方式,其优先级最高)

e2c143a8436a486b9689d1c51ca4dc34.png

3571fc293b9340a4932cb1f67c2f4acd.png

组件所在页面的生命周期

  • 有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理
  • 样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义
  • 可用的生命周期包括:

70a0342126b04321a1b58ce466c011ce.png

734ea26d494a4f8aa6857977f1c57734.png

六、Component构造器

7e4e499e67614fb99989df67f5d85133.png

相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
5天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
5天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
1月前
|
人工智能 小程序
【一步步开发AI运动小程序】五、帧图像人体识别
随着AI技术的发展,阿里体育等公司推出的AI运动APP,如“乐动力”和“天天跳绳”,使云上运动会、线上健身等概念广受欢迎。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章分为四部分:初始化人体识别功能、调用人体识别功能、人体识别结果处理以及识别结果旋转矫正。下篇将继续介绍人体骨骼图绘制。
|
1月前
|
人工智能 小程序 vr&ar
AI运动小程序开发常见问题集锦二
截至当前,我们的AI运动识别小程序插件已迭代至第23个版本,广泛应用于健身、体育、体测、AR互动等场景。本文针对近期用户咨询,汇总了常见问题,帮助用户减少开发成本,提高效率。主要涵盖计时与计数模式的区别、综合排行榜生成方法、全屏模式适配及无开发能力用户的解决方案。
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
2月前
|
存储 传感器 小程序
跳绳计数小程序开发系统
首先,我们需要明确跳绳计数小程序的核心功能:为用户提供跳绳计数的便捷方式。这意味着小程序需要能够准确地记录用户的跳绳次数,并为用户提供清晰、直观的计数展示。
|
2月前
|
人工智能 编解码 小程序
【一步步开发AI运动小程序】四、小程序如何抽帧
随着AI技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等APP使云上运动会、线上健身等概念备受关注。本文将引导您从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”。文中详细介绍了微信小程序抽帧的相关API、设置及注意事项,帮助开发者更好地实现AI运动功能。下篇将介绍人体识别技术,敬请期待。
|
2月前
|
存储 小程序 安全
微信的开发管理都需要配置什么?
【10月更文挑战第17天】微信的开发管理都需要配置什么?
33 0
|
2月前
|
小程序 搜索推荐 前端开发
小剧场短剧影视小程序开发
小剧场短剧影视小程序旨在为用户提供一个便捷、互动的平台,让用户能够随时随地观看、分享和评论各类小剧场短剧。通过小程序,用户可以浏览热门短剧、搜索感兴趣的内容、参与社区互动,以及享受个性化的推荐服务。