tencent cloud

腾讯云超级应用服务

动态与公告
【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
按量计费(后付费)
续费指引
停服说明
快速入门
套餐管理
概述
控制台账号管理
存储配置
加速配置
品牌化配置
平台功能
控制台登录
用户和权限体系
小程序管理
小游戏管理
应用管理
商业化
平台管理
用户管理
团队管理
运营管理
安全中心
代码接入指引
Demo 及 SDK 获取
Android
iOS
Flutter
App 服务端接入指南
GUID 生成规则
小程序开发指南
小程序介绍与开发环境
小程序代码组成
指南
框架
组件
API
服务端
JS SDK
基础库
IDE 使用指南
小游戏开发指南
指南
API
服务端
实践教程
小程序登录实践教程
小程序订阅消息实践教程
支付相关实践教程
广告接入实践教程
小游戏订阅消息实践教程
相关协议
数据处理和安全协议

小程序代码结构

PDF
聚焦模式
字号
最后更新时间: 2025-03-10 16:12:24

1. JSON配置

JSON 是一种数据格式,并不是编程语言,在小程序中,JSON 扮演的静态配置的角色。
我们可以看到在项目的根目录有一个app.jsonproject.config.json,此外在pages/logs目录下还有一个logs.json,我们依次来说明一下它们的用途。

1.1 小程序配置 app.json

app.json是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "TCSAS",
"navigationBarTextStyle":"black"
}
}
我们简单说一下这个配置各个项的含义:
pages 字段:用于描述当前小程序所有页面路径,这是为了让宿主客户端知道当前您的小程序页面定义在哪个目录。
Window 字段:定义小程序所有页面的顶部背景颜色,文字颜色定义等。
其他配置项细节可以参考文档 小程序配置 app.json

1.2 工具配置 project.config.json

通常大家在使用一个工具的时候,都会针对各自喜好做一些个性化配置,例如编译配置,当您换了另外一台电脑重新安装工具的时候,您还要重新配置。
考虑到这点,小程序开发者工具在每个项目的根目录都会生成一个project.config.json,您在开发者工具上做的任何配置都会写入到这个文件,当您重新安装工具或者换电脑工作时,您只要载入同一个项目的代码包,开发者工具就自动会帮您恢复到当时您开发项目时的个性化配置,其中会包括项目名字、代码上传时自动压缩等等一系列选项。

1.3 页面配置 page.json

这里的page.json其实用来表示pages/logs目录下的logs.json这类和小程序页面相关的配置。
如果您整个小程序的风格是蓝色调,那么您可以在app.json里边声明顶部颜色是蓝色即可。实际情况可能每个页面都有不一样的色调来区分不同功能模块,因此我们提供了 page.json,让开发者可以独立定义每个页面的一些属性,例如刚刚说的顶部颜色、是否允许下拉刷新等等。
其他配置项细节可以参考文档 页面配置

1.4 JSON语法

这里说一下小程序里 JSON 配置的一些注意事项。
JSON 文件都是被包裹在一个大括号中 {},通过 key-value 的方式来表达数据。JSON 的 Key 必须包裹在一个双引号中,在实践中,编写 JSON 的时候,忘了给 Key 值加双引号或者是把双引号写成单引号是常见错误。
注意:
1. JSON 的值只能是以下几种数据格式,其他任何格式都会触发报错,例如 JavaScript 中的 undefined。
数字,包含浮点数和整数;
字符串,需要包裹在双引号中;
Bool 值,true 或者 false;
数组,需要包裹在方括号中 [];
对象,需要包裹在大括号中 {};
Null。
2. 还需要注意的是 JSON 文件中无法使用注释,试图添加注释将会引发报错。

2. WXML 模板

从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中HTML是用来描述当前这个页面的结构,CSS用来描述页面的样子,JS通常是用来处理这个页面和用户的交互。
同样道理,在小程序中也有同样的角色,其中WXML充当的就是类似HTML的角色。打开pages/index/index.wxml,您会看到以下的内容:
<view class="container">
<view class="userinfo">
<button wx:if="{{!hasUserInfo && canIUse}}"> getUserInfo </button>
<block wx:else>
<image src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
HTML 非常相似,WXML由标签、属性等等构成。但是也有很多不一样的地方,我们来一一阐述一下:
1. 标签名字不一样
往往写 HTML 的时候,经常会用到的标签是 <div>, <p>, <span>,开发者在写一个页面的时候可以根据这些基础的标签组合出不一样的组件,例如日历、弹窗等。换个思路,既然大家都需要这些组件,为什么我们不能把这些常用的组件包装起来,大大提高我们的开发效率。
从上边的例子可以看到,小程序的WXML用的标签是view,button,text等,这些标签就是小程序给开发者包装好的基本能力,我们还提供了地图、视频、音频等等组件能力。
2. 多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式
在打开网页的流程中,我们通常会通过 JS 操作 DOM (对应 HTML 的描述产生的树),以引起界面的一些变化响应用户的行为。例如,用户单击某个按钮的时候,JS会记录一些状态到JS变量里边,同时通过DOM API操控DOM的属性或者行为,进而引起界面一些变化。当项目越来越大的时候,您的代码会充斥着非常多的界面交互逻辑和程序的各种状态变量,显然这不是一个很好的开发模式,因此就有了 MVVM 的开发模式(例如 React, Vue),提倡把渲染和逻辑分离。简单来说就是不要再让 JS 直接操控 DOMJS 只需要管理状态即可,然后再通过一种模板语法来描述状态和界面结构的关系即可。
小程序的框架也是用到了这个思路,如果您需要把一个 Hello World 的字符串显示在界面上。
WXML需要这么写:
<text>{{msg}}</text>
JS只需要管理状态即可:
this.setData({ msg: "Hello World" })
通过 {{ }} 的语法把一个变量绑定到界面上,我们称为数据绑定。仅仅通过数据绑定还不够完整的描述状态和界面的关系,还需要 if/else,for等控制能力,在小程序里边,这些控制能力都用 wx:开头的属性来表达。
更详细的文档可以参考 WXML 语法参考

3. WXSS样式

WXSS具有 CSS 大部分的特性,小程序在WXSS也做了一些扩充和修改。
1. 新增了尺寸单位。在写CSS样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。WXSS 在底层支持新的尺寸单位 rpx ,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。
2. 提供了全局的样式和局部样式。和前边 app.json, page.json 的概念相同,您可以写一个 app.wxss 作为全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。
3. 此外 WXSS 仅支持部分 CSS 选择器。
更详细的文档可以参考 渲染层-WXSS

4. JS 逻辑交互

一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的单击、获取用户的位置等等。在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作。
<view>{{ msg }}</view>
<button bindtap="clickMe">点击我</button>
单击 button 按钮的时候,我们希望把界面上 msg 显示成 "Hello World",于是我们在 button 上声明一个属性: bindtap ,在 JS 文件里边声明了 clickMe 方法来响应这次点击操作:
Page({
clickMe: function() {
this.setData({ msg: "Hello World" })
}
})
响应用户的操作就是这么简单,更详细的事件可以参考文档 渲染层-事件


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈