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

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

一、小程序组件化思想

小程序组件化开发

  • 小程序刚推出时是不支持组件化的,也是为人诟病的一个点
  • 从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

相关文章
|
23天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
4天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
17天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
22天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
28天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
28天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
18天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
30天前
|
数据采集 人工智能 小程序
【一步步开发AI运动小程序】十、姿态动作相似度比较
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,重点讲解姿态动作相似度比较功能的运用,包括样本动作帧的采集和姿态相似度的计算方法,以及在组合运动中的应用实例。
|
24天前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。
|
29天前
|
人工智能 小程序 开发者
【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,涵盖云上运动会、健身打卡等热门应用场景。通过示例代码展示如何调用插件功能,实现动作追踪与分析,助力开发者快速上手。