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

news2024/11/24 15:56:00

🖥️ 微信小程序 专栏:小程序组件化开发
🧑‍💼 个人简介:一个不甘平庸的平凡人🍬

✨ 个人主页:CoderHing的个人主页

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力❤️


目录

一、小程序组件化思想

小程序组件化开发

二、自定义组件的过程

创建一个组件

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

三、组件样式实现细节

组件的样式细节

四、组件使用过程通信

组件的通信

向组件传递数据 - properties

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

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

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

五、组件插槽定义使用

什么是插槽?

多个插槽的使用

behaviors

组件的生命周期

组件所在页面的生命周期

六、Component构造器


一、小程序组件化思想

小程序组件化开发

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

 

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

二、自定义组件的过程

创建一个组件

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

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

  

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

 

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

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

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

 

三、组件样式实现细节

组件的样式细节

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

 

四、组件使用过程通信

组件的通信

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

向组件传递数据 - properties

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

 

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

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

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

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

 

 

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

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

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

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

 

  

五、组件插槽定义使用

什么是插槽?

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

单个插槽的使用

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

 

 

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

使用 css中的 :empty

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;
}

多个插槽的使用

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

 

 

 

behaviors

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

 

 

组件的生命周期

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

 

组件所在页面的生命周期

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

  

六、Component构造器

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

梦想绽放CEO熊文:停产单一VR产品,VST将成为VR行业标配

很久没在北京参加线下活动了&#xff0c;真不容易。今天奇遇VR正式发布了消费级双目全彩VST VR设备&#xff1a;奇遇Dream MIX。会后&#xff0c;我还参加了梦想绽放CEO熊文的群访&#xff0c;从中了解到更多消息。 奇遇Dream MIX 关于奇遇Dream MIX这款产品&#xff0c;我开始…

【苹果iMessage相册推信息推】那些新功效理当可以或许压倒您。保护用户隐私是苹果的起点之一

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

如何从小白起步成为百万博主|配音运营工具必不可少

从新手做短视频&#xff0c;无论你是抖音还是快手&#xff0c;掌握一些视频运营工具&#xff0c;能让我们日常工作事半功倍以下是我做短视频三年来&#xff0c;一直都在使用的工具&#xff0c;从视频素材剪辑软件音效配音&#xff0c;满足了我日常运营的需求&#xff0c;新手也…

Windows Defense Mechanism - Part 1

Overview If I’m a long-time CTF player (or HackTheBox lab machine player), things are gonna go a little off when I’m put into a real world scenario - meaning that, when facing a well defended Windows machine. This article will summarize the main Window…

基于Java(Struts2 框架)+Mysql实现(Web)学生成绩管理系统【100010053】

学生成绩信息管理系统 Summary JavaWeb 课程设计作品。类似学校的教务管理系统&#xff0c;实现了其中的部分功能&#xff0c;包括学生的增删改查&#xff0c;成绩的增删改查等。 Note 关于数据库 数据库名称&#xff1a;smxy_class字符集&#xff1a;UTF-8先建立数据库&am…

Zookeeper下载、本地模式安装、集群操作

目录 1、Zookeeper下载地址 2 、本地模式安装 2.1安装前准备 2.2配置修改 2.3操作 Zookeeper 2.4配置参数解读 3、集群操作 3.1 集群安装 3.2 ZK 集群启动停止脚本 4、客户端命令行操作 4.1、命令行语法 4.2、znode 节点数据信息 4.3点类型&#xff08;持久/短暂…

【案例教程】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用

【点击观看视频】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用 机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”&#xff0c;是发现新规律&#xff0c;总结和分析实验结果的利器。机器学习涉及的理论和方法繁多&#xff0c;编程…

【Unity篇】Unity入门介绍

目录 游戏引擎 Unity3D特点 窗口介绍 快捷键 创建工程 组件的获取 游戏引擎 程序的框架:一款游戏最最核心的代码。 包含以下系统:渲染系统&#xff0c;物理引擎&#xff0c;碰撞检测系统&#xff0c;音效&#xff0c;脚本引擎&#xff0c;动画系统&#xff0c;人工智能…

全志V85x芯片 Tina Linux RISC-V E907核心开发指南

全志V85x芯片 Tina Linux RISC-V E907核心开发指南 1 编写目的 介绍v85X 上E907 的启动环境和AMP 的环境搭建。 2 使用范围 全志V85X 系列芯片 3 环境 A7 SDK&#xff1a;Tina E907 SDK&#xff1a;melis 4 SDK 快捷命令说明 这里主要介绍几个下文会用到的命令&#xf…

【嵌入式项目开源】基于ESP32的墨水屏桌面小屏幕

首先简要介绍一下这个项目&#xff1a; 这个项目的开源主要包括硬件&#xff0c;固件和软件两部分&#xff0c;外壳后面如果做了也会开源出来。该项目主要是参考了以下教学视频。 链接&#xff1a;桌面小屏幕实战教学 其中硬件部分改动不大&#xff0c;主要是把USB驱动改成了Ty…

推荐系统从入门到入门(1)——推荐系统综述与协同过滤

本系列博客总结了不同框架、不同算法、不同界面的推荐系统&#xff0c;完整阅读需要大量时间&#xff08;又臭又长&#xff09;&#xff0c;建议根据目录选择需要的内容查看&#xff0c;欢迎讨论与指出问题。 目录 系列文章梗概 系列文章目录 一、问题背景介绍 1.推荐算法与…

企业拥有PMO(项目管理办公室)的好处

PMO&#xff08;项目管理办公室&#xff09;&#xff0c;是一个企业内定义和维护项目管理标准的办公室或部门。PMO为项目的执行提供指导和标准。他们创造切实的目标&#xff0c;与整个企业的愿景保持一致&#xff0c;并确保所有目标的实现。 PMO指导以项目模板、标准化流程、…

DoIP协议概述

大家好哈&#xff0c;我是穿拖鞋的汉子&#xff01; 伴随着需求不断提升&#xff08;车身数据传输速率和带宽需求&#xff09;&#xff0c;为了满足需求将以太网引进到车载网络中。车载以太网在诊断传输层的应用协议是ISO 13400&#xff08;Diagnostic On IP—DoIP&#xff09;…

模型实战(1)之YOLOv5 实现目标检测+训练自己的数据集

模型实战&#xff08;1&#xff09;之YOLOv5 实现目标检测训练自己的数据集 写一个小总结吧&#xff0c;关于yolov5使用可以参考我的两外两篇博文&#xff1a; 1.YOLOV5算法一之Windows10下yolov5安装测试并训练自己的数据集 2.YOLOV5算法二之数据集转换及自动划分训练集与测试…

代理模式之提出问题和代理模式的概念

代理模式之提出问题和代理模式的概念 1. 提出问题 ①现有代码缺陷 针对带日志功能的实现类&#xff0c;我们发现有如下缺陷&#xff1a; 对核心业务功能有干扰&#xff0c;导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中&#xff0c;不利于统一…

docker创建带有用户密码认证和web可视化界面的私有仓库

docker-registry的搭建 有时候使用Docker Hub这样的公共仓库可能不方便&#xff0c;用户可以创建一个本地仓库供私人使用。比如&#xff0c;基于公司内部项目构建的镜像。 docker-registry是官方提供的工具&#xff0c;可以用于构建私有的镜像仓库。 安装运行docker-registry…

Go语言设计与实现 -- 上下文

我们先来看一下context.Context的接口&#xff1a; // A Context carries a deadline, a cancellation signal, and other values across // API boundaries. // // Contexts methods may be called by multiple goroutines simultaneously. type Context interface {// Deadl…

【TypeScript】TS接口类型(三)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

modnet:real-time trimap-free portrail matting via objective decomposition

目前抠图&#xff08;Image Matting&#xff09;的主流算法有哪些&#xff1f; - 知乎什么是抠图对于一张图I&#xff0c; 我们感兴趣的人像部分称为前景F&#xff0c;其余部分为背景B&#xff0c;则图像I可以视为F与B的加权…https://www.zhihu.com/question/68146993/answer/…

SpringCloud-Gateway配置及持久化、过滤器、异常处理

文章目录yml配置代码配置持久化数据结构predicates(断言) 和filters&#xff08;过滤&#xff09;新增配置说明相关接口全局过滤器局部过滤器全局异常处理gateway不能和web一起使用 需要排除掉<dependency><groupId>org.springframework.cloud</groupId><…