1.目录结构
前言:小程序包含一个描述整体程序的
app
和多个描述各自页面的page
。
一个小程序主体部分由三个文件组件,必须放在项目的根目录,如下:
文件 | 必需 | 作用 |
---|---|---|
app.js |
是 | 小程序逻辑 |
app.json |
是 | 小程序公共配置 |
app.wxss |
否 | 小程序公共样式表 |
一个小程序page
页面由四个文件组件,分别为:
文件类型 | 必需 | 作用 |
---|---|---|
js |
是 | 页面逻辑 |
wxml |
是 | 页面结构 |
json |
否 | 页面配置 |
wxss |
否 | 页面样式表 |
注意:为了方便开发者减少配置项,描述页面的四个必须具有相同的路径与文件名。
2.JSON
配置
JSON
是一种数据格式,并不是编程语言,在小程序中,JSON
扮演的静态配置的角色。在项目的根目录有一个app.json
和project.config.json
,此外在每一个page
文件中有一个相对于的json
文件。
小程序配置app.json
app.json
是当前小程序的全局配置,也就是说在app.json
中配置的东西会应用在每一个页面中。包括小程序的所有页面路径,界面表现,网络超时时间,底部tab等。
新建的项目里面的app.json
配置内容如下:
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle":"black"
}
}
简单说一下这个配置各个项的含义:
-
pages
字段-----用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。 -
window
字段------定义小程序所有页面的顶部背景颜色,文字颜色定义等。 - 其他配置项细节参考文档微信开发文档配置项
JSON
语法
JSON
文件都是被包裹在一个大括号中{},通过key-value
的方式来表达数据,JSON
的key
必须包裹在一个双引号中,在实践中,编写JSON
的时候,忘了给key
值加双引号或者是把双引号写成了单引号是常见的错误。
JSON
的值只能是以下几种数据格式,其他任何格式都会触发报错,列如:js
中的undefined
.
- 数字,包含浮点数和整数
- 字符串,需要包裹在双引号中
-
Bool
值,true
或者false
- 数组,需要包裹在方括号中[]
- 对象,需要包裹在大括号中{}
Null
注意:需要注意的是
JSON
文件中无法使用注释,添加注释会引发报错。
wxml
网页编辑采用
HTML+CSS+JS
这样的组合。其中HTML是用来描述当前这个页面的结构,CSS
用来描述页面的样子,JS
通常是用来处理这个页面和用户的交互。
WXML和HTML
非常相似,WXML
由标签,属性等等构成。但是也有很多不一样的地方,我们来一一阐述一下:
1.标签名字有点不一样:
`HTML`常用到的标签是`div,p,span`。开发者在写一个页面的时候可以根据这个基本的标签组合出不一样的组件。
`WXML`小程序常用到的`view,button,text`等等。这些标签就是小程序给开发者包装好的基本能力,我们还提供了地图,视频,音频等等组件能力。[小程序组件](https://developers.weixin.qq.com/miniprogram/dev/component/)
2.多了一些wx:if
这样的属性以及{{ }}这样的表达式:
在网页的一般开发流程中,我们通常会通过`JS`操作`DOM`(对应HTML的描述产生的树),以引起界面的变化响应用户的行为。**例如:用户点击某个按钮时,`JS`会记录一些状态到`JS`变量里边,同时通过`DOM API `操控`DOM`的属性或者行为,进而引起界面变化。当项目越来越大时,你的代码会充斥着非常多的界面交互逻辑喝程序的各种状态变量,显然不是一个很好的开发模式,因此就有了`MVVM`的开发模式(如:`React,Vue`),提倡把渲染喝逻辑分离。简单的说就是不要再让`JS` 直接操控`DOM `,`JS`只需要管理状态即可,然后再通过一种模板语法来描述状态和界面结构的关系即可。**
小程序将文本Hello World的字符串显示在界面上。
//WXML这样编写
{{msg}}
//JS这样编写
data:{
msg:'Hello World' //初始化定义数据
}
通过{{ }}的语法把一个变量绑定到界面上,称之为“数据绑定”.仅仅通过数据绑定还不够完整的描述状态和界面的关系,还需要if/else,for
等控制能力,在小程序里边,这些控制能力都用wx
:开头的属性来表达。WXML
WXSS
样式
WXSS
具有CSS
大部分的特性,小程序WXSS
也做了一些扩充和修改。
1.新增了尺寸单位:
写`CSS`样式时,开发者需要考虑手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。`WXSS`在底层支持新的尺寸单位`rpx`,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。
2.提供了全局的样式和局部样式:
与前面的app.json;peag.json
的概念相同,你可以写一个app.wxss
作为全局样式,会作用于当前小程序的所有页面,局部页面样式page.wxss
仅对当前页面生效。
3.此外WXSS
仅支持部分css
选择器:
更详细参考WXSS
JS
逻辑交互:
一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击,获取用户的位置等等,在小程序里边,我们就通过编写JS
脚本来处理用户的操作。
{{ msg }}
点击button按钮时,我们希望把界面上msg
显示成”Hello World
“,于是我们在button
上声明一个属性:bindtap
,在js
文件里边声明了clickMe
方法来响应这次点击操作:
Page({
data:{
msg:''
},
clickMe(){
this.setData({
msg:'Hello World'
})
}
})
更详细参考WXML事件
此外还可以在JS
调用小程序提供的丰富的API
,利用API
可以方便的调用微信提供的能力。通过wx.getUserInfo
获取微信用户的头像和昵称,最后通过setData
把获取到的信息显示到界面上,更详细参考小程序API`
3.util
公共函数以及读取
util
目录下的util.js
文件专用于小程序项目中的公共函数定义,可以将项目开发过程中的公共代码方法提取封装到util.js
文件中。
1.util/util.js
中定义公共方法:
const toStr = s =>{
s="你好,"+s;
return s;
}
module.exports = {
formatTime,toStr
}
2.在指定页面中的js
中模块化引入utils
的js
文件:
//通过require方式引入整个util
//const util=require("../../utils/util")
//通过import方式引入整个util
//import util from "../../utils/util"
//引入指定的模块
import {formatTime} from "../../utils/util"
采用整体引入方式,在调用时请使用实例名,例如:
util.formatDate(new Date())
3.利用页面的onLoad
事件完成数据赋值展示:
onLoad() {
this.setData({
loginTime:formatTime(new Date())
});
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
}
4.小程序配置
全局配置:
小程序根目录下的app.json
文件用来对微信小程序进行全局配置,决定页面文件的路径,窗口表现,设置网络超时时间,设置tab
等等。更详细参考小程序全局配置
常用的配置选项app.json
:
{
"pages": [
"pages/index/index",
"pages/logs/index"
],
"window": {
"navigationBarTitleText": "Demo"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/logs/index",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true
}
页面配置:
每一个小程序页面也可以使用同名`.json`文件来对文本页面的窗口表现进行配置,页面中配置会覆盖`app.json`的`window`中相同的配置项。
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}
配置小程序/sitemap
配置:
微信现在已开发小程序内搜索,开发者可以通过`sitemap.json`配置,或者管理后台页面收录开关来配置其小程序页面是否允许微信索引。当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引。当用户的搜索词条触发该索引时,小程序的页面将可能展示在搜索结果中。爬虫访问小程序内页面时,会携带特定的`user-agent:mpcrawler`及[场景值](https://developers.weixin.qq.com/miniprogram/dev/reference/scene-list.html):1129.需要注意的是,若小程序爬虫发现的页面数据和真实用户的呈现不一致,那么该页面将不会进入索引中。
具体配置说明:
- 页面收录设置:可对整个小程序的索引进行关闭,小程序管理后台-功能-页面内容接入-页面收录开开关;详情
-
sitemap
配置:可对特定页面的索引进行关闭;
sitemap
配置:
小程序根目录下的sitemap.json
文件中用来配置小程序及其页面是否允许被微信索引。完整配置项说明请参考小程序sitemap配置
例如1:
{
"rules":[{
"action": "allow",
"page": "*"
}]
}
所有页面都会被微信索引(默认情况)
例如2:
{
"rules":[{
"action": "disallow",
"page": "path/to/page"
}]
}
配置path/to/page
页面不被索引,其余页面允许被索引
例如3:
{
"rules":[{
"action": "allow",
"page": "path/to/page"
}, {
"action": "disallow",
"page": "*"
}]
}
配置path/to/page
页面被索引,其余页面不被索引
注:没有sitemap.json
则默认所有页面都能被索引
注:{’action':'allow','page':'\*'
}是优先级最低的默认规则,末显示指明'disallow’
的都默认被索引
如何调试:
当在小程序项目中设置了sitemap
的配置文件(默认为sitemap.json
)时,便可以在开发者工具控制台上显示当前页面是否被索引的调试信息(最新版本的开发者工具支持索引提示)
//sitemap.json文件
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
}
注意:sitemap
的索引提示是默认开启的,如需要关闭sitemap
的索引提示,可在小程序项目配置文件project.config.json
的sitemap
中配置字段checkSiteMap
为false
;sitemap
文件内容容量大为5120个UTF8
字符;