官方文档:https://developers.weixin.qq.com/miniprogram/dev/

微信小程序,简称小程序,英文名 Mini Program,对于开发者而言,小程序开发门槛相对较低,难度不及APP,能够满足简单的基础应用,适合生活服务类线下商铺以及非刚需低频应用的转换。
局限性:必须依赖于微信,不能独立运行
优势:不需要考虑兼容问题,推广安装的问题。因为微信软件安装量够多,开发难度小
优势:独立运行,不需要依赖于谁,可以适合所有的业务需求
局限性:需要用户安装,解决适配(开发兼容问题),开发难度大
官方文档:https://mp.weixin.qq.com/cgi-bin/wx?token=&lang=zh_CN


官方文档:https://developers.weixin.qq.com/miniprogram/dev/index.html
小程序是微信提供一种服务它明确的给出了使用小程序的接入流程

我们从流程中可以看到,第一步就需要注册帐号。
官方文档:https://mp.weixin.qq.com/cgi-bin/wx?token=&lang=zh_CN

注意:
1、一个邮箱只能申请一个小程序帐号
2、注册了公众号的邮箱不能再申请小程序
3、注册完成后,需要进入注册帐号的邮箱激活帐号




注意:输入注册时的邮箱和密码进行登陆
网址:https://mp.weixin.qq.com

登陆后会被要求进行二次扫码验证登陆,直接使用绑定的微信扫码登陆即可,二次验证成功后,进入如下所示界面:



注意:小程序开发,需要依赖于小程序的 appid ,我们可以通过如下图所示的操作,查看当前小程序的 appid

为了帮助开发者简单和高效地开发和调试微信小程序,腾讯在原有的公众号网页调试工具的基础上,推出了全新的微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式。
下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html?t=2018626
根据自己的操作系统,下载相应版本的软件,下载后,双击运行安装,一路下一步即可。

安装完成后,运行开发工具,会出现以下界面

使用之前绑定的微信号进行扫码,会出现以下界面:

点击小程序项目,出现如下界面:

到此,官方开发工具安装完成。

下载后,直接双击运行安装程序,一路下一步安装即可。
安装完成后,运行该软件,可以按下图所示安装中文包:

当前vscode还不支持小程序代码提示,所以要进一步安装相关vscode的插件
minapp插件:

wechat-snippet插件:

wepy snippet插件:

运行官方开发工具,先填写项目信息

点击确定,进入开发界面:


一个小程序主体部分由三个文件组成,必须放在项目的根目录

比如当前我们的《第一个小程序》项目根目录下就存在这三个文件:

项目根目录下的pages目录存放的是小程序中的页面,小程序每个页面都由4个文件组成(注意:这四种文件必须是同名的), 分别为:

例如:《第一个小程序》项目中的pages目录

例如:index页面文件夹中

app.json文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多tab(底部导航菜单)等。
注意:
1)app.json中不能添加任何注释,否则会报错
2)字符串用户双引号引起来。

上图中我们看到app.json中实际保存的是小程序的主配置项属性列表,app.json中可以设置的属性有以下几项:

值是一个数组,数组的每一项都字符串,用来指定小程序由哪些页面组成。每一项代表对应页面【路径+文件名(不包含后缀名)】的信息。数组的第一项代表小程序的初始页面。
注意:小程序每新增一个页面,相应的在pages中就需要增加多一个配置页面记录;反之亦然。
用于设置小程序的状态栏、导航条、标题、窗口背景色。

示例:

tabBar 支持的属性:

tabBar 中list支持的属性:


用于设置各种网络请求的超时时间

注意:上线之前一定要设置一下超时时间,不然小程序有可能出现上列情况。
示例:

用于在开发者工具中开启 debug 模式,在开发者工具的控制台面板,调试信息以 info 的形式给出,其信息有 Page 的注册,页面路由,数据更新,事件触发。可以帮助开发者快速定位一些常见的问题,默认为开启状态。
在开发阶段,建议打开 debug。上线时请关闭此选项,设置为 false。
开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/config.html
每个小程序页面也可以使用同名*.json文件来对本页面的窗口表现进行配置,页面中配置项会覆盖app.json的window中相同的配置项。
用于设置小程序的状态栏、导航条、标题、窗口背景色。
开发文档:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/page.html
静态配置
例如:
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}

使用微信提供的API接口
语法:wx.setNavigationBarTitle(Object object)

注:调用微信提供的API设置当前页面标题的级别比*.json文件的高
开发文档:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/sitemap.html
小程序根目录下的sitemap.json文件用于配置小程序及其他页面是否允许被微信索引,文件内容为一个json对象,如果没有sitemap.json,则默认为所有页面都允许被索引;sitemap.json有以下属性:

rules配置项指定了索引规则,每项规则为一个`json`对象,属性如下所示:


设置启动参数


{
"rules":[{
"action": "allow",
"page": "pages/goods/goods",
"params": ["a", "b"],
"matching": "exact"
}, {
"action": "disallow",
"page": "pages/goods/goods"
}]
}
说明:
pages/goods/goods?a=1&b=2 => 优先索引pages/goods/goods => 不被索引pages/goods/goods?a=1 => 不被索引pages/goods/goods?a=1&b=2&c=3 => 不被索引{
"rules":[{
"action": "allow",
"page": "pages/goods/goods",
"params": ["a", "b"],
"matching": "inclusive"
}, {
"action": "disallow",
"page": "pages/goods/goods"
}]
}
说明:
pages/goods/goods?a=1&b=2 => 优先索引pages/goods/goods?a=1&b=2&c=3 =>优先索引pages/goods/goods => 不被索引pages/goods/goods?a=1 => 不被索引{
"rules":[{
"action": "allow",
"page": "`pages/goods/goods",
"params": ["a", "b"],
"matching": "exclusive"
}, {
"action": "disallow",
"page": "`pages/goods/goods"
}]
}
说明:
pages/goods/goods => 优先索引pages/goods/goods?c=3 =>优先索引pages/goods/goods?a=1 => 不被索引pages/goods/goods?a=1&b=2 => 不被索引{
"rules":[{
"action": "allow",
"page": "pages/goods/goods",
"params": ["a", "b"],
"matching": "partial"
}, {
"action": "disallow",
"page": "pages/goods/goods"
}]
}
说明:
pages/goods/goods?a=1 => 优先索引pages/goods/goods?a=1&b=2 =>优先索引pages/goods/goods => 不被索引pages/goods/goods?c=2 => 不被索引注:没有`sitemap.json`则默认所有页面都能被索引
注:`{"action": "allow", "page": "*"}`是优先级最低的默认规则,未显示指明"disallow"的都默认被索引
快速创建小程序
注:一定要微信开发工具中使用可以
注释内容:
分为两种:单行、多行注释
单行注释的快捷键:ctrl + l
多行注释的快捷键:alt + shift + a
开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/code.html#WXML-%E6%A8%A1%E6%9D%BF
从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中 HTML 是用来描述当前这个页面的结构, CSS 用来描述页面的样子, JS 通常是用来处理这个页面和用户的交互。
同样道理,在小程序中也有同样的角色,其中 ==WXML 充当的就是类似 HTML 的角色==。打开 pages/index/index.wxml,你会看到以下的内容:

和 HTML 非常相似, WXML 由标签、属性等等构成。但是也有很多不一样的地方,我们来一一阐述一下:
1)标签名字有点不一样
2)多了一些 wx:if 这样的属性以及 {{}} (插值表达式)这样的表达式
我们把 ... 标签称为视图容器。
开发文档:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/data.html
通过{{}}的语法(插值表达式)把一个变量绑定到界面上,我们称为数据绑定。
小程序提倡把渲染和逻辑分离,简单来说就是不要再让`js`直接操控`DOM`,`js`只需要管理状态即可,然后再通过一种模板语法来描述状态和界面结构的关系即可。
WXML语法:
<标签>{{变量名}}</标签>
示例:
1.首先得在*.js文件中定义数据变量,例如:index 页面中

2.然后才可以在以*.wxml为后缀的文件中使用

3.效果如下图所示

开发文档:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/list.html
语法:
<标签名 wx:for="{{变量名}}" [wx:for-index="自定义名称" wx:for-item="自定义名称" wx:key="自定义名称"]></标签名>
说明:
示例:
1.首先在*.js后缀的文件中设定数组数据

2.然后在*.wxml为后缀的模板文件中使用列表渲染相当于循环遍历出userData的数据

3.效果如下图所示

注意1:
当wx:for的值为字符串时,会将字符串解析成字符串数组
{{item}}
等同于
{{item}}
注意2:
花括号和引号之间如果有空格,将最终被解析成为字符串
{{item}}
等同于
{{item}}
开发文档:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/conditional.html
语法:
<标签名 wx:if="{{condition}}"></标签名>
在框架中,使用wx:if="{{condition}}"来判断是否需要渲染该代码块,也可以用wx:elif和wx:else来添加一个else块。
快速生成一个小程序页面的方法:
在微信提供的开发工具中中,打开app.json文件,直接在app.json中的pages配置项里增加一个新页面的路径:

然后直接保存该文件,那么在系统开发工具中立即就能自动帮我们生成这个页面

示例:
1.在*.js文件中添加一个数据变量

2.然后直接在*.wxml模板页面中使用条件渲染

当前为v1类设置样式:

3.效果如下图所示

运算符优先级

示例代码:
var a = 10;
var b = 20;
// 加法运算
console.log(30 === a + b);
// 减法运算
console.log(-10 === a - b);
// 乘法运算
console.log(200 === a * b);
// 除法运算
console.log(0.5 === a / b);
// 取余运算
console.log(10 === a % b);
注意:
加法运算符+也可以用作字符串拼接
var a = '.w';
var b = 'xs'l
// 字符串拼接
console.log('.wxs' === a + b);
运算符优先级

示例代码:
var a = 10;
var b = 20;
// 小于
console.log(true === (a < b));
// 大于
console.log(false === (a > b));
// 小于等于
console.log(true === (a <= b));
// 大于等于
console.log(false === (a >= b));
运算符优先级

示例代码:
var a = 10;
var b = 20;
// 等号
console.log(false === (a == b));
// 非等号
console.log(true === (a != b));
// 全等号
console.log(false === (a === b));
// 非全等号
console.log(true === (a !== b));
运算符优先级

示例代码:
var a = 10;
a = 10; a *= 10;
console.log(100 === a);
a = 10; a /= 5;
console.log(2 === a);
a = 10; a %= 7;
console.log(3 === a);
a = 10; a += 5;
console.log(15 === a);
a = 10; a -= 11;