小程序学习笔记:自定义组件创建、引用、应用场景及与页面的区别

在微信小程序开发中,自定义组件是一项极为实用的功能,它能有效提高代码的复用性,降低开发成本,提升开发效率。本文将深入剖析微信小程序自定义组件的各个关键方面,包括创建、引用、应用场景以及与页面的区别,并附上详细代码示例,帮助开发者全面掌握这一技术。

一、自定义组件的创建

创建自定义组件主要分为以下三个步骤:

  1. 创建 components 文件夹:在项目根目录下,通过鼠标右键新建一个名为 “components” 的文件夹。此文件夹将用于存放所有自定义组件,是管理组件的基础目录。
  2. 新建组件文件夹:在 “components” 文件夹内,再新建一个专门用于存放特定组件的文件夹。例如,创建一个名为 “test” 的文件夹,该文件夹将用于存放我们的第一个自定义组件。
  3. 生成组件文件:在新建的组件文件夹(如 “test” 文件夹)上,鼠标右键点击,选择 “新建 component” 选项。随后,输入组件名称(如 “test”)并回车确认。此时,开发工具会自动生成组件对应的四个文件,分别是:
  • .js 文件:用于编写组件的逻辑代码,如数据处理、事件响应等功能。
  • .json 文件:组件的配置文件,用于声明组件相关的属性和配置信息。
  • .wxml 文件:组件的结构文件,类似于 HTML,用于定义组件的页面结构。
  • .wxss 文件:组件的样式文件,用于设置组件的外观样式,与 CSS 功能类似。

为保证项目目录结构清晰,建议将每个组件分别存放在独立的文件夹中。这样,不同组件的文件相互隔离,便于管理和维护,避免文件混乱。

二、自定义组件的引用

组件的引用方式分为局部引用和全局引用两种,它们各自有着不同的应用场景和使用方法。

(一)局部引用

局部引用意味着组件仅能在当前被引用的页面内使用。具体引用步骤如下:

  1. 在页面.json 配置文件中引入组件:打开需要引用组件的页面的.json 配置文件(例如,若要在首页引用组件,则打开首页对应的.json 文件)。在文件中声明一个 “usingComponents” 节点,所有要使用的组件都在该节点下进行声明。“usingComponents” 的值是一个键值对,其中键是组件引用后的名称,值是组件的存放路径(路径不要带任何后缀)。例如
{"usingComponents": {"myTest1": "/components/test"}
}

上述代码中,“myTest1” 是自定义的引用名称,“/components/test” 是 “test” 组件的存放路径,表示从项目根目录下的 “components” 文件夹中找到 “test” 组件。
2. 在页面.wxml 中使用组件:完成配置文件的引用声明后,即可在页面的.wxml 文件中以标签形式使用组件。例如,在首页的.wxml 文件中添加如下代码

<view><myTest1></myTest1>
</view>

保存文件后,页面将显示该组件的内容。若在其他未引用该组件的页面中使用相同标签,组件内容不会被渲染,这证明了局部引用的局限性,即组件仅在当前引用页面有效。

(二)全局引用

全局引用允许组件在小程序的每个页面中使用,提高了组件的复用性。引用步骤如下:

在 app.json 全局配置文件中引入组件:打开项目的 app.json 全局配置文件,在与 “window” 节点同级的位置声明一个 “usingComponents” 节点。在该节点下进行组件引用声明,方式与局部引用类似。例如:

{"window": {// 窗口相关配置},"usingComponents": {"myTest1": "/components/test"}
}
  1. 在各页面中使用组件:完成全局引用配置后,在任何页面的.wxml 文件中都可以直接使用该组件。例如,在首页和消息页面的.wxml 文件中都可以添加如下代码来使用组件:
<view><myTest1></myTest1>
</view>

保存文件后,在首页和消息页面中都能正常显示组件内容,这体现了全局引用的优势,即一次引用,多处使用。

三、应用场景选择

在实际开发中,应根据组件的使用频率和范围来选择合适的引用方式。

  1. 全局引用场景:当某个组件在多个页面中频繁使用时,建议采用全局引用方式。例如,小程序底部的导航栏组件,几乎在每个页面都需要显示,此时全局引用可以避免在每个页面的.json 文件中重复声明引用,减少代码冗余,提高开发效率和代码的可维护性。
  2. 局部引用场景:若组件仅在特定页面可能被用到,局部引用则更为合适。比如,某个页面中独有的表单提交提示组件,仅在该页面使用,对其他页面无意义,这种情况下局部引用既能满足需求,又不会增加其他页面的不必要引用,降低了代码复杂度。

四、组件和页面的区别

虽然组件和页面在表面上都由.js、.json、.wxml 和.wxss 四个文件组成,但它们在内部存在一些显著区别。

.json 文件区别:组件的.json 文件中需要声明 “component": true” 这个属性,用于表明当前是一个组件。而页面的.json 文件通常默认有 “usingComponents” 节点(用于局部引用组件),但不会有 “component": true” 属性。例如,组件的.json 文件内容可能如下:

{"component": true
}
  1. .js 文件区别:组件的.js 文件中调用的是 “Component” 函数,用于定义组件的逻辑和行为。而页面的.js 文件调用的是 “Page” 函数,用于定义页面的相关配置和功能。例如,组件的.js 文件开头可能是:
Component({// 组件的属性、数据、方法等定义
})

页面的.js 文件开头则是:

Page({// 页面的数据、生命周期函数、事件处理函数等定义
})
  1. 事件处理函数区别:组件的事件处理函数需要定义在 “methods” 节点中。而页面的事件处理函数只需定义在与 “data” 节点同级的位置,与组件的处理方式不同。例如,页面的事件处理函数定义如下:
Page({data: {// 页面数据},// 事件处理函数handleTap: function() {// 处理点击事件的逻辑}
})

组件的事件处理函数定义如下:

Component({data: {// 组件数据},methods: {// 事件处理函数handleTap: function() {// 处理点击事件的逻辑}}
})

通过深入理解微信小程序自定义组件的创建、引用、应用场景及与页面的区别,并结合实际项目进行运用,开发者能够更加高效地开发出功能丰富、结构清晰的小程序应用,为用户带来更好的体验。希望本文的内容能对广大开发者有所帮助,助力大家在小程序开发领域不断探索和进步。

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

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

相关文章

开发数字化绿色低碳园区系统:分阶段实施指南

目录 摘要 背景 核心模块 阶段性开发 分阶段开发实施 第一阶段(3-6个月):搭建核心骨架 第二阶段(6-9个月):扩展功能 第三阶段(9-12个月):深度定制 技术选型 注意事项 实施计划表 小结 摘要 数字化绿色低碳园区系统通过物联网、能源管理和数据分析等技术,…

智能实验室革命:Deepoc大模型驱动全自动化科研新生态

自动化实验执行 自动化实验执行通过机器人技术与智能控制系统的深度融合&#xff0c;重构传统实验操作模式&#xff0c;其核心技术突破体现在以下层面&#xff1a; 1. ​​多模态任务分解与执行架构​​ 基于大模型的任务解析引擎可将复杂实验流程分解为可执行的原子操作序列…

还在手动部署?用Jenkins+Docker+Git实现自动化CI/CD

“每次发版都要手动打包上传&#xff0c;部署宕机了才发现出错&#xff1f;” 你还在重复“开发提测-打包部署-验证回归”的流水线操作&#xff1f;明明可以一键搞定的流程&#xff0c;为何还在亲力亲为&#xff1f;是时候了解并掌握 自动化 CI/CD 的真正威力了&#xff01; 手…

Stream流中间方法的使用

Stream流的中间方法详解 Stream流的中间方法指那些返回新Stream的操作&#xff0c;允许链式调用。这些方法通常用于数据过滤、映射、排序等操作&#xff0c;不会触发最终计算。 filter方法 filter用于筛选满足条件的元素&#xff0c;接受一个Predicate函数式接口参数。 Lis…

华为云Flexus+DeepSeek征文|华为云ModelArts结合FeedMe:开启AI驱动的RSS阅读新时代

华为云FlexusDeepSeek征文&#xff5c;华为云ModelArts结合FeedMe&#xff1a;开启AI驱动的RSS阅读新时代 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架构 二、FeedMe…

华为云Flexus+DeepSeek征文 | 华为云ModelArts Studio新手入门:DeepSeek服务的配置与使用详解

华为云FlexusDeepSeek征文 | 华为云ModelArts Studio新手入门&#xff1a;DeepSeek服务的配置与使用详解 前言一、ModelArts Studio介绍1. 华为云ModelArts Studio简介2. 华为云ModelArts Studio主要特点3. 华为云ModelArts Studio主要使用场景 二、ModelArts Studio平台开通De…

Note2:机器学习基本攻略(Machine Learning by Hung-yi Lee)

目录 基本思路 1.训练资料上loss很大 1.1 model bias 1.2 optimazation&#xff08;优化不够好&#xff09; 1.3如何确定是 model bias还是optimazation 解决方法 2.训练资料上loss很小 2.1 Overfitting 解决方案 1.使用更多训练资料 2.限制模型 2.2 Mismatch 3.…

使用ubuntu下的FAST和gfzrnx进行广播星历下载及版本之间的转换

使用FAST下载混合的广播星历文件 cd FAST_V3.00.03 (进入文件夹) chmod x FAST (授权) chmod x bin/* ./FAST1 下载&#xff1a;https://gnss.gfz.de/services/gfzrnx/download &#xff08;需注册&#xff09; 2 打开bash&#xff0c;依次输入 (其中gfzrnx_2.1.12_lx64为下载…

vue裁剪图片

有一个需求就是在你有俩张图片一样大小&#xff0c;一个亮色的&#xff0c;一个暗色的&#xff0c;亮色的根据后端返回的数据显示多高&#xff0c;这样就有一个感觉是慢慢往上走的&#xff0c;主要用到了css的一个属性 .my-info-image {width: 280px;height: 200px;position: a…

使用GDAL库统计不同分区内的灾害点分布情况,计算灾害相对密度等统计指标

主要功能是处理地理空间栅格数据&#xff08;TIFF文件&#xff09;和灾害点数据&#xff08;CSV文件&#xff09;&#xff0c;统计不同分区内的灾害点分布情况&#xff0c;并计算灾害相对密度等统计指标。 TIFF文件&#xff1a;已经重分类后的文件 CSV文件&#xff1a;灾害点…

jar 包如何下载

在 Javaweb - 2 中&#xff0c;我们导入了三那个 jar 包来进行服务端的 JSON 串格式转换&#xff0c;这个为大家做一个如何下载那三个 jar 包的教程~ 打开仓库网站 我们需要先打开一个仓库网址&#xff1a;Maven Repository: Search/Browse/Explore 这个网址中&#xff0c;几…

【vue3】打包配置webpack压缩,哈希值设置

压缩配置 依赖下载&#xff1a; npm i --save-dev compression-webpack-plugin vue.config.js配置 const CompressionWebpackPlugin require(compression-webpack-plugin);filenameHashing: true, // 打包后为文件名增加hash值// 配置webpackconfigureWebpack: config >…

vue3 + elementPlus 封装hook,检测form表单数据修改变更;示例用 script setup 语法使用

vue3 elementPlus 封装hook,检测form表单数据修改变更&#xff1b;示例 script setup 语法 原文&#xff1a;https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文&#xff1a;https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文&#xff1a;https://mp.weixin.qq.com…

Java-泛型类

一、泛型类的基本概念 1. 什么是泛型类 泛型类是指使用类型参数定义的类&#xff0c;可以在类定义时不指定具体类型&#xff0c;而在实例化时指定。 2. 泛型类的作用 类型安全&#xff1a;编译时检查类型匹配 消除强制转换&#xff1a;减少运行时ClassCastException风险 代…

信任边界的人生智慧

我曾经是个喜欢试探的人 总想知道朋友会不会在我困难时伸手&#xff0c;合作伙伴会不会在利益面前变脸&#xff0c;爱人会不会在诱惑下坚守 结果发现&#xff0c;每一次试探都像是在关系上撒盐 不是因为对方经不起考验&#xff0c;而是「考验」这个行为本身就充满了不信任的…

SQL Server 中 GO 的作用

CREATE DATABASE MyDatabase; USE MyDatabase; GO --定义局部变量 DECLARE s_no varchar(8), s_avgrade numeric(4,1); --对局部变量赋值 SET s_no 20170208; SET s_avgrade 95.0; --使用局部变量 UPDATE student SET s_avgrade s_avgrade WHERE s_no s_no;&#x1f31f; G…

指标中台+大模型:解密衡石Agentic BI的NL2DSL架构实现

——Text2Metrics引擎如何攻克语义鸿沟&#xff0c;碾压传统NL2SQL方案 一、传统NL2SQL的“架构原罪”&#xff1a;业务语义的失控黑洞 当某银行尝试用NL2SQL分析“高净值客户流失率”时&#xff0c;系统生成如下危险SQL&#xff1a; 这正是NL2SQL的三大架构缺陷&#xff1a;…

设计模式 - 抽象工厂

抽象工厂是对工厂的抽象化&#xff0c;而不只是制造方法。 为了满足不同用户对产品的多样化需求&#xff0c;工厂不会只局限于生产一类产品&#xff0c;但是系统如果按工厂方法那样为每种产品都增加一个工厂又会造成工厂泛滥。所以&#xff0c;为了调和这种矛盾&#xff0c;抽…

面向对象Plus(2/2)

目录 面向对象Plus(qianwen) 一.面向对象三大特性 封装 继承 多态 二.多态 1.了解多态 2.体验多态 三.类属性和实例属性 1.类属性 a.设置和访问类属性 类属性的优点 b.修改类属性 四.类方法和静态方法 1.类方法 a.类方法特点 b.类方法应用场景 2.静态方法 a…

MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口

以下是 MocapApi 技术文档 github https://github.com/pnmocap/MocapApi?tabreadme-ov-file 国内可以查找getcode 英文文档 https://mocap-api.noitom.com/mocap_api_en.html 概述 MocapApi 是 NeuronDataReader&#xff08;以下简称 NDR&#xff09;的下一代编程接口&…