当前位置: 首页 > news >正文

第 2 章 微信小程序的构成 (代码导读)断更,后续继续更新

2.1 小程序项目的基本结构

Hello World!程序.mp4

文泉云盘 -- 图书二维码资源管理系统兆泰源二维码管理系统icon-default.png?t=N7T8https://www.wqyunpan.com/resourceDetail.html?id=284928&openId=oUgl9wdyNYHu9EcAe-GEwbQdZilY&qrcodeId=242916&sign=c2lnbm1PUmNxSndPWGFOckZ4aVUtMTcwODk1Mjk1MTQ5Mw==@c2lnblhtclRUSmZDWWp4QUVjYmctMTcwODk1Mjk1MTQ5Mw==

2.1.1 项目目录结构

之前小北创建的 Hello World! 项目的目录结构:


       从中可以看到,工程根目录中有两个文件夹page所示。和 utils 以及一些独立文件。先来介绍各个独立文件的用途。

  • .eslintrc.js是ESLint 配置文件,小程序默认使用ESLint 进行代码检查,在开发中一般无须修改这个文件。
  • appjs 文件可以理解为是小程序的入口文件,在这个文件中进行小程序应用实例的注册,整个小程序只有一个应用实例,此实例是全局共享的。
  • app.json 是当前小程序项目的全局配置文件,在其中进行页面路由、窗口标题等全局信息的配置。
  • app.wxss 是当前小程序项目中编写的公共样式表,这里面配置的样式在所有组件中都可以直接应用。
  • project.config.ison 是工程配置文件,在这个文件中可以对当前小程序工作做一些个性化的配置,如界面颜色、编译规则等。
  • sitemap.json是一个配置文件,用来配置小程序页面是否允许被微信搜索。

下面,再来看一下工程根目录下的两个文件夹。
utils 文件夹用来存放一些提供工具支持的 JS 文件,默认生成的 utiljs 文件中的代码如下

const formatTime = date => {const year = date.getFullYear()const month = date.getMonth() + 1const day = date.getDate()const hour = date.getHours()const minute = date.getMinutes()const second = date.getSeconds()return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}const formatNumber = n => {n = n.toString()return n[1] ? n : `0${n}`
}module.exports = {formatTime
}


       util.is 中实际上提供了一个获取格式化后的当前日期时间的方法。

       pages文件夹用来存放所有页面,在小程序开发中,一个完整的页面由JS、WXML、WXSS和JSON这4类文件组成,因此在pages 文件夹下,每一个子文件夹即表示一个小程序页面,在预览 Hello World!项目时,会看到首页上会展示当前登录用户的微信头像,这个页面其实就是工程中的index页面,如果点击用户头像,小程序会跳转到一个显示启动记录的页面,此页面就是项目中的 logs 页面。

2.1.2 小程序全局配置文件

       在小程序项目中, JSON 文件通常用来设置配置选项。每个小程序工程下会有一个全局配置
文件,即 app.json ,小程序中的每一个页面也会有一个配置文件。
Hello World!项目中的 logs 页面:
      先来关注一下 app.json 这个文件, Hello World ! 工程中的此文件内容如下:
{ "pages":[ "pages/index/index", "pages/logs/logs" ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "Weixin", "navigationBarTextStyle":"black" }, "style": "v2", "sitemapLocation": "sitemap.json" 
}
{ "pages":[ //配置页面路由列表 "pages/index/index", "pages/logs/logs" ], "window":{ //配置应用窗口表现 "backgroundTextStyle":"light", //页面背景色样式 "navigationBarBackgroundColor": "#fff", //导航栏背景色 "navigationBarTitleText": "Weixin", //导航栏标题 "navigationBarTextStyle":"black" //导航栏文字颜色 }, "style": "v2", //应用样式,版本 2 "sitemapLocation": "sitemap.json" //sitemap 文件位置 
} 

说明:

1. pages 数组配置了应用的页面路由 , 分别为 index 首页和 logs 日志页面。
2. window 对象配置了应用窗口的表现 , 包括背景色样式、导航栏背景色、导航栏标题、导航栏文字颜色等。
3. style 属性配置了应用样式的版本 , 这里是版本 2
4. sitemapLocation 属性配置了 sitemap 文件的位置 , 这里为 sitemap.json

      其中,pages 字段用来配置程序中所有的页面路径,只要是应用内使用到的页面,都需要在 这里进行配置。window 字段用来对窗口的表现形式进行配置,包括背景色、标题文字、标题颜色 等。style 字段用来配置 UI 页面的风格。sitemapLocation 用来设置项目中 sitemap 文件的位置。

1.entryPagePath
      这个字段用来设置小程序启动时的默认页面,如果不配置,小程序在启动时将默认选择配置在 pages 列表中的第一个页面作为默认页面。以 HelloWorld 项目为例,我们也可以配置小程序在启动时直接展示日志页面,示例代码如下:
      "entryPagePath":"pages/logs/logs"
2.pages
       这个配置项不再做过多的介绍,其用来指定小程序由哪些页面组成,需要配置为一个列表列表中的每一项对应一个页面的路径,文件名无须带后缀,框架会自动寻找对应的 WXML、JSJSON 和 WXSS 文件。

3.window
       window 选项用于对小程序的窗口表现进行全局设置,其可以配置的选项很多,

如表所示:

4. tabBar
     如果小程序有多个功能模块,可以采用多 tab 的模式来构建。 tabBar 选项用来对底部或顶部
的标签栏进行配置,顶部的标签栏效果。
例代码如下:
"tabBar": {"list": [{"pagePath": "pages/index/index","text": "主页"},{"pagePath": "pages/logs/logs","text": "日志"}],"position":"top","color": "#ff0000","backgroundColor": "#0000ff","borderStyle": "white"}"tabBar": { //底部导航栏配置"list": [{ //导航项列表"pagePath": "pages/index/index", //导航到页面路径"text": "主页" //导航项文字},{
"pagePath": "pages/logs/logs","text": "日志"}],"position":"top", //导航栏位置,这里是顶部"color": "#FF0000
", //文字颜色"backgroundColor": "#0000FF
", //导航栏背景色"borderStyle": "white" //导航栏边框色
}
 
说明:
1. tabBar 对象配置了底部导航栏的属性。
2. list 数组配置了多个导航项 , 每个导航项包含 pagePath text, 分别表示导航路径和显示文字。
3. position 属性配置了导航栏的位置 , 这里是顶部。
4. color 属性配置了导航项文字的颜色 , 这里是红色。
5. backgroundColor 属性配置了导航栏的背景色 , 这里是蓝色。
6. borderStyle 属性配置了导航栏边框的颜色 , 这里是白色。

2.2 小程序的开发架构

2.2.1 注册小程序

       每个小程序应用都需要在 app.js 文件中先注册一个应用实例。整个小程序只有一个应用实
例,这个实例是全局共享的,可以通过如下方法来获取此应用实例:
        const appInstance = getApp()
      这段代码的作用是获取小程序的全局应用实例。
getApp() 是微信小程序提供的一个全局 API,用于获取全局唯一的 App 实例。
      const appInstance = getApp() 的作用是 :
      1. 使用 getApp() 获取到小程序的全局应用实例。
      2. 将这个全局应用实例赋值给一个常量 appInstance
      3. 之 后就可以通过 appInstance 来访问全局的应用实例 , 幵调用应用实例上的属性、方法等。
      4. 加上 const 是为了声明 appInstance 是一个常量 , 刜始化后不可再修改挃向 , 防止错误地覆盖了全局
应用实例。
       这样获取全局的应用实例后 , 就可以在仸意页面中轻松访问共享的实例和数据 , 实现页面间通信等功能。
       比如可以在 appInstance 上维护一些全局数据 , 仸意页面可以通过 appInstance.globalData 来读取
和修改。
       所以这是一个小程序开収中获取全局变量的常用模式。
在之前的 HelloWorld 项目中,app.js 文件中默认生成的代码如下:
// app.js
App({onLaunch() {// 展示本地存储能力const logs = wx.getStorageSync('logs') || []logs.unshift(Date.now())wx.setStorageSync('logs', logs)// 登录wx.login({success: res => {// 収送 res.code 到后台换取 openId, sessionKey, unionId}})},globalData: {userInfo: null}
})
// app.js
App({ 
onLaunch() { // 展示本地存储能力const logs = wx.getStorageSync('logs') || [] //获取本地存储的 logs,如果没有默认为
空数组logs.unshift(Date.now()) //往数组头部添加当前时间wx.setStorageSync('logs', logs) //将 logs 存储到本地// 登录wx.login({ success: res => { // 収送 res.code 到后台换取 openId, sessionKey, unionId } }) 
}, 
globalData: { userInfo: null 
} 
})
说明:
      1. // app.js 注释表明这是 app.js 文件。
      2. // 展示本地存储能力 注释表明以下代码是为了展示本地存储的能力。
       3. // 获取本地存储的 logs, 如果没有默认为空数组 注释解释了 wx.getStorageSync('logs') 的意图 与默认值。
       4. // 往数组头部添加当前时间 注释说明了 logs.unshift(Date.now()) 的功能。
       5. // logs 存储到本地 注释说明了 wx.setStorageSync('logs', logs) 的作用。
       6. // 登录 注释表示以下代码是为了实现登录功能。
       7. // 发 res.code 到后台换取 openId, sessionKey, unionid。
        App()方法用来注册应用实例,需要注意,此方法必须在 app.js 文件中调用,且只能调用一
次。此方法中可以传入一个配置对象,在上面的示例代码中,传入的配置对象配置了 onLaunch 和 globalData 两个选项,onLaunch 是小程序的生命周期回调,小程序初始化时会被调用。globalData 用来配置小程序中所需要使用的全局数据。

2.2.2 小程序中页面的注册

       与应用的注册类似,每个页面的 JS 文件中也要进行页面的注册 使用 Page() 方法来进行页
面注册,可以先看一下 HelloWorld 工程中 logs.js 文件中的内容,如下所示:
// logs.js
const util = require('../../utils/util.js')
Page({// data 选项提供页面渲染所需要的数据data: {logs: []},// 页面加载的生命周期方法onLoad() {this.setData({logs: (wx.getStorageSync('logs') || []).map(log => {return {date: util.formatTime(new Date(log)),timeStamp: log}})})}
})
/ logs.js 
const util = require('../../utils/util.js') 
Page({ 
// data 选项提供页面渲染所需要的数据 
data: { logs: [] 
}, 
// 页面加载的生命周期方法
onLoad() {this.setData({ logs: (wx.getStorageSync('logs') || []).map(log => { // 返回包含 date 和 timeStamp 的对象 return { 
date: util.formatTime(new Date(log)), // 调用 util 中的 formatTime 格式化时
间戳为日期字符串timeStamp: log } }) })
} 
})
说明:
1. // logs.js 注释表示这是 logs.js 文件。
2. // data 选项提供页面渲染所需要的数据
       注释说明 data 对象存放页面渲染所需数据。
3. // 页面加载的生命周期方法
       注释表示 onLoad 方法是页面的生命周期方法 , 在页面加载时触収。
4. // 返回包含 date timeStamp 的对象
        注释说明 map 方法返回的对象包含 date timeStamp 属性。
5. // 调用 util 中的 formatTime 格式化时间戳为日期字符串
       注释说明 date 属性由 util.formatTime 方法根据 timeStamp 生成。
6. // timeStamp
       该属性的意思很明显 , 为时间戳。
       之所以选择 logs.js 文件来做参考,是因为相比 index.js,日志页面要简单很多。Page()方法中
也需要传入一个配置对象,如上代码所示,data 选项用来配置当前页面所要使用的数据。onLoad
选项是一个生命周期回调,当页面加载时会调用此方法,一些页面的加载逻辑可以在这个回调中
实现。

相关文章:

第 2 章 微信小程序的构成 (代码导读)断更,后续继续更新

2.1 小程序项目的基本结构 Hello World!程序.mp4 文泉云盘 -- 图书二维码资源管理系统兆泰源二维码管理系统https://www.wqyunpan.com/resourceDetail.html?id284928&openIdoUgl9wdyNYHu9EcAe-GEwbQdZilY&qrcodeId242916&signc2lnbm1PUmNxSndPWGFOck…...

十一、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法(promotion)重新定义paintEvent事件 2、实现程序 (1)创建项目,基于QWidget (2)添加类,为Widget组件提升类 #inclu…...

八、ChatGPT能替代什么人?

上一讲关于ChatGPT的热炒,其实对于我们来说算是敲了敲警钟。 其实在今天,关于ChatGPT,最多人关注的一个问题就是:ChatGPT能取代人吗,或者说能抢人的饭碗么吗? 有人说不能,也有人说能&#xff08…...

QT C++实现点击按键弹出窗口并显示图片/视频|多窗口应用程序的设计和开发

一、介绍 首先,QT界面开发中主要大体分为2种多窗口的形式: 嵌入式: 新生成的窗口嵌入在主窗口内部独立窗口: 以弹窗形式的新窗口生成和展示 这里就讲解最简单的:点击案件后,跳出一个新窗口 二、代码实…...

shell和go实现:防火墙放行所有端口,唯独拦截80端口

shell 1.防火墙放行所有端口&#xff0c;唯独拦截80端口 1.1拦截 mkdir -p /data/shellscat > /data/shells/02nginx_close.sh <<-EOF #!/bin/bash# 检查Linux系统版本 linux_version$(cat /etc/redhat-release)# 根据Linux系统版本选择相应的防火墙开启命令和保存…...

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射&#xff0c;编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码&#xff0c;包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…...

【pytorch】tensor.detach()和tensor.data的区别

文章目录 序言相同点不同点测试实例应用 序言 .detach()和.data都可以用来分离tensor数据&#xff0c;下面进行比较pytorch0.4及之后的版本&#xff0c;.data仍保留&#xff0c;但建议使用.detach() 相同点 x.detach()和x.data返回和x相同数据的tensor&#xff0c;这个新的t…...

教师资格证相关

文章目录&#xff1a; 一&#xff1a;考试时间 二&#xff1a;考试科目 三&#xff1a;相关网站 四&#xff1a;相关 一&#xff1a;考试时间 教资 笔试 面试笔试报名笔试考试笔试公布面试报名面试时间面试公布上半年1月14日3月12日4月15日4月…...

卷积神经网络介绍

卷积神经网络(Convolutional Neural Networks&#xff0c;CNN) 网络的组件&#xff1a;卷积层&#xff0c;池化层&#xff0c;激活层和全连接层。 CNN主要由以下层构造而成&#xff1a; 卷积层&#xff1a;Convolutional layer&#xff08;CONV&#xff09;池化层&#xff1a…...

XSS简介

XSS被称为跨站脚本攻击(Cross-site scripting)&#xff0c;由于和CSS(CascadingStyle Sheets)重名&#xff0c;所以改为XSS。 XSS主要速于javascript语言完成恶意的攻击行为&#xff0c;因为javascript可非常灵活的操作html、css和浏览器 XSS就是指通过利用网页开发时留下的漏…...

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…...

MATLAB R2024a 主要更新内容

系列文章目录 前言 一、主要更新 计算机视觉工具箱 —— 为二维和三维视觉任务设计算法、标注数据并生成代码。深度学习工具箱 —— 支持变换器等架构&#xff1b;导入并共同模拟 PyTorch 和 TensorFlow 模型。仪器控制工具箱 —— 使用仪器资源管理器应用程序管理带有 IVI 和…...

4.1.CVAT——目标检测的标注详细步骤

文章目录 1. 进入任务1. 创建任务2. 已创建的task3. 进入标注界面 2. 选择标注类型2.1 选择标注类型2.2 进行标注2.3 遮挡 2.快捷键3.导出标注结果 1. 进入任务 登录后会看到如下图界面&#xff0c;CVAT的标注最小单位是Task&#xff0c;每个Task为一个标注任务。点击Task按钮…...

图论-算法题

797. 所有可能的路径 题目: 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i …...

onnx 1.16 doc学习笔记七:python API一览

onnx作为一个通用格式&#xff0c;很少有中文教程&#xff0c;因此开一篇文章对onnx 1.16文档进行翻译与进一步解释&#xff0c; onnx 1.16官方文档&#xff1a;https://onnx.ai/onnx/intro/index.html](https://onnx.ai/onnx/intro/index.html)&#xff0c; 如果觉得有收获&am…...

LACP——链路聚合控制协议

LACP——链路聚合控制协议 什么是LACP&#xff1f; LACP&#xff08;Link Aggregation Control Protocol&#xff0c;链路聚合控制协议&#xff09;是一种基于IEEE802.3ad标准的实现链路动态聚合与解聚合的协议&#xff0c;它是链路聚合中常用的一种协议。 链路聚合组中启用了…...

终端启动jupyter notebook更换端口

一、问题描述 如果尝试在端口 8889 上启动 Jupyter Notebook 但最终启动在了 8890 端口&#xff0c;这通常意味着 8889 端口已经被占用。要解决这个问题&#xff0c;可以尝试以下几种方法来关闭占用 8889 端口的进程。 1. 查找并终止占用端口的进程 首先&#xff0c;需要找出…...

IT发布管理,轻松部署软件

我们带来了一项令人振奋的好消息&#xff0c;可有效缓解构建的质量相对劣质和发布的速度相对缓慢。 ManageEngine卓豪推出了ServiceDesk Plus MSP中的IT发布管理&#xff0c;配备了可视化的工作流程&#xff0c;这是PSA-ITSM解决方案的一部分。有了这个新功能&#xff0c;您可以…...

2024国际生物发酵展览会独家解读-力诺天晟科技

参展企业介绍 北京力诺天晟科技有限公司&#xff0c;专业致力于智能仪器仪表制造&#xff0c;工业自动控制系统用传感器、变送器的研发、设计、销售和服务。 公司坐落于首都北京行政副中心-通州区&#xff0c;下设生产子公司位于河北香河经济开发区&#xff0c;厂房面积 300…...

YOLOv9尝鲜测试五分钟极简配置

pip安装python包&#xff1a; pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码&#xff1a; import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…...

Android14 Launcher3开发实战:用SurfaceControl实现跨进程动画的5个关键技巧

Android 14 Launcher3开发实战&#xff1a;SurfaceControl跨进程动画的5个核心技法 在Android系统定制开发领域&#xff0c;Launcher作为用户交互的第一入口&#xff0c;其动画流畅度直接影响用户体验。随着Android 14的发布&#xff0c;SurfaceControl在跨进程动画处理上展现…...

Loom虚拟线程响应式改造失败率高达63%?这4个关键配置错误你中了几个?

第一章&#xff1a;Loom虚拟线程响应式改造失败率高达63%&#xff1f;这4个关键配置错误你中了几个&#xff1f;Loom 虚拟线程&#xff08;Virtual Threads&#xff09;在 Spring Boot 3.2 和 Project Reactor 2023.0.0 中原生支持响应式编程模型&#xff0c;但大量团队在迁移过…...

别再硬扛期刊论文了!Paperxie 这四步,帮你把 “难产稿” 变成投稿通关文

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 你有没有过这种时刻&#xff1f;对着空白文档发呆三小时&#xff0c;期刊论文的标题都定不下来&#xf…...

Python列表操作教程

Python列表操作教程 【免费下载链接】mx-bili-plugin 项目地址: https://gitcode.com/gh_mirrors/mx/mx-bili-plugin 基础概念 列表是Python中最常用的数据结构之一... 视频演示 关键代码示例 # 创建列表 my_list [1, 2, 3, 4, 5]# 列表切片操作 subset my_list[1…...

别再死记硬背Flex属性了!用这5个真实网页布局案例,带你彻底搞懂CSS Flexbox

别再死记硬背Flex属性了&#xff01;用这5个真实网页布局案例&#xff0c;带你彻底搞懂CSS Flexbox 每次看到Flexbox那十几个属性列表就头疼&#xff1f;明明背了justify-content和align-items的区别&#xff0c;实际写代码时还是得反复查文档&#xff1f;不如换个学习方式——…...

Liunx创建挂载步骤

1. 查看磁盘情况lsblk # 查看所有块设备 fdisk -l # 查看磁盘分区详情&#xff08;需 root&#xff09;2. 分区&#xff08;以 /dev/sdb 为例&#xff09;fdisk /dev/sdb进入交互界面后&#xff1a;n → 新建分区p → 主分区&#xff08;或 e 扩展分区&#xff09;回车接受默认…...

终极Adobe Illustrator自动化脚本集:7个免费工具让你设计效率翻倍

终极Adobe Illustrator自动化脚本集&#xff1a;7个免费工具让你设计效率翻倍 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 如果你每天在Adobe Illustrator中重复着枯燥的机械操作…...

Windows安装安卓应用终极指南:告别模拟器的轻量级解决方案

Windows安装安卓应用终极指南&#xff1a;告别模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为电脑无法直接安装手机应用而困扰&#xff…...

从标准库到HAL库:手把手移植STM32 Modbus-RTU代码的避坑指南

从标准库到HAL库&#xff1a;STM32 Modbus-RTU移植的深度实践 当我们需要将现有的STM32标准库Modbus-RTU项目迁移到HAL库时&#xff0c;这个过程远比简单的函数替换复杂得多。本文将深入探讨移植过程中的关键差异点、常见陷阱以及解决方案&#xff0c;帮助开发者顺利完成这一技…...

告别命令行恐惧:Mac/Linux下用ADT图形界面玩转AutoDock分子对接

告别命令行恐惧&#xff1a;Mac/Linux下用ADT图形界面玩转AutoDock分子对接 第一次接触AutoDock时&#xff0c;我被它强大的分子对接能力吸引&#xff0c;但随即被满屏的命令行操作劝退。如果你也和我一样&#xff0c;对终端窗口里闪烁的光标感到不安&#xff0c;那么ADT&…...