![17ae843f216ed0c0b58a31b993a07732.png](https://i-blog.csdnimg.cn/blog_migrate/0bc3f6c4e57dcc5986cad853ec1c8d94.jpeg)
点击右上角关注我,私信发送“小程序”获取极客学院《微信小程序开发教程(共90课)》
1、为什么会有小程序
背景:更好的体验和规范与管理
2、什么是小程序
小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想。
用户扫一扫或者搜一下即可打开应用,也体现了“用完即走”的理念。
用户不用憨是否安装太多应用的问题。应用将无处不在,随时可用,但又“无需安装卸载”。
3、小程序与应用程序的区别
无需安装
不占内存
易传播
4、小程序能做什么
内容/工具小程序: 知乎 微博 摩拜 今日头条
零售小程序:拼多多 京东 蘑菇街 小米商城
游戏/娱乐小程序:跳一跳 欢乐斗地主 欢乐麻将 斗鱼直播
5、小程序开发准备工作
注册小程序账号->激活邮箱->信息登记->登录小程序管理后台->完整小程序信息->绑定开发者
6、安装开发者工具
官网下载
预演版本->开发版本->体验版本->审核版本->线上版本
开发版本也可以直接到审核版本
![ec233f09368f67bc367003d2b4cc3976.png](https://i-blog.csdnimg.cn/blog_migrate/cfc431ecde11f7d0eea92a54d4c7aa8e.jpeg)
7、小程序代码结构与基本配置
- app.js:
每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。
整个小程序只有一个 App 实例,是全部页面共享的。开发者可以通过 getApp 方法获取到全局唯一的 App 实例,获取App上的数据或调用开发者注册在 App 上的函数。
- app.json
小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。
每一个小程序页面也可以使用同名 .json 文件来对本页面的窗口表现进行配置,页面中配置项会覆盖 app.json 的 window 中相同的配置项。
- app.wxss
小程序公共样式表
- pages
用于指定小程序由哪些页面组成,每一项都对应一个页面的 路径(含文件名) 信息。文件名不需要写文件后缀,框架会自动去寻找对应位置的 .json, .js, .wxml, .wxss 四个文件进行处理。
数组的第一项代表小程序的初始页面(首页)。小程序中新增/减少页面,都需要对 pages 数组进行修改。
![425b72f2e03ae8cab664e4d874582ac9.png](https://i-blog.csdnimg.cn/blog_migrate/a8dc3b6a7c416065791dba97370e07cb.jpeg)
8、微信小程序开发框架
基本构成
WXML:WeiXin Markup Language,构建页面内容
WXSS:WeiXin Style Sheets,用于描述页面样式
WXS:WXML能力增强的脚本语言,快速构建页面内容结构
JavaScript :交互逻辑、数据通信
- WXML:(WeiXin Markup Language)是框架设计的一套标签语言,结合组件、WXS和时间系统,可以构建出页面的结构。
语法:
...
标签名>
标签闭合、属性名称大小写敏感
1)数据绑定 Mustache语法{{变量名/属性/运算符}}
{{message}} // page.jsPage({ data: { message: 'Hello world!' }})
![23692521ba70e73d2bf28ffe4e790025.png](https://i-blog.csdnimg.cn/blog_migrate/efb86bd28612a4cc7364fccabf861c50.jpeg)
标签属性:
![a62a26f6b83fcea78d2bcf185d5f4940.png](https://i-blog.csdnimg.cn/blog_migrate/b25f37e9f4a9993e4bc4296efad9f919.jpeg)
2)列表渲染
FirstName: {{firstName}}, LastName: {{lastName}} // page.jsPage({ data: { staffA: {firstName: 'Hulk', lastName: 'Hu'}, staffB: {firstName: 'Shang', lastName: 'You'}, staffC: {firstName: 'Gideon', lastName: 'Lin'} }})
3)条件渲染
FirstName: {{firstName}}, LastName: {{lastName}} // page.jsPage({ data: { staffA: {firstName: 'Hulk', lastName: 'Hu'}, staffB: {firstName: 'Shang', lastName: 'You'}, staffC: {firstName: 'Gideon', lastName: 'Lin'} }})
4)模板
FirstName: {{firstName}}, LastName: {{lastName}} // page.jsPage({ data: { staffA: {firstName: 'Hulk', lastName: 'Hu'}, staffB: {firstName: 'Shang', lastName: 'You'}, staffC: {firstName: 'Gideon', lastName: 'Lin'} }})
5)引用
WXML 提供两种文件引用方式import和include。
import
import可以在该文件中使用目标文件定义的template,如:
在 item.wxml 中定义了一个叫item的template:
{{text}}
在 index.wxml 中引用了 item.wxml,就可以使用item模板:
import 的作用域
import 有作用域的概念,即只会 import 目标文件中定义的 template,而不会 import 目标文件 import 的 template。
如:C import B,B import A,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template。
A template
B template
include
include 可以将目标文件除了 外的整个代码引入,相当于是拷贝到 include 位置,如:
body
header
footer
- WXSS:
![b794bf30930d338daf1e950185188666.png](https://i-blog.csdnimg.cn/blog_migrate/955a0ec62709a88fba361d7e9fbcc73d.jpeg)
尺寸单位rpx:响应式的像素
![696416be199f461ac6ca68b491991f43.png](https://i-blog.csdnimg.cn/blog_migrate/0aec2715dc7e213da9f80698722f01d7.jpeg)
样式导入-@import
![50ad44f4ec9cb7c25682c6f35b83fa9b.png](https://i-blog.csdnimg.cn/blog_migrate/c01f7509c2616dc9d2573728186bd17d.jpeg)
内联样式-style
选择器
![fc28ef5e5b088b723d504fb1622ee826.png](https://i-blog.csdnimg.cn/blog_migrate/838e8cf63987be7b81bafc12d179d624.jpeg)
优先级
element->1
.element->10
#element->100
style->1000
!important->∞
- WXS:(WeiXin Script),是对JS脚本语言上层的封装和限制,方便运算处理
![40b03352f49d36529f2fdc3a7a794640.png](https://i-blog.csdnimg.cn/blog_migrate/9dfdf46eb45a6d242e195e389d20e6b3.jpeg)
模块:对外不可见,exports暴露,require引入其他模块。
注释:单行注释、多行注释、结尾注释
支持的运算符:
![260052f4a72fcfcc0d5e19c6a22dcb41.png](https://i-blog.csdnimg.cn/blog_migrate/a4010a231051756217447fcc1dd3e3d1.jpeg)
语句:与JS基本一致,不支持try-catch语句
数据类型:8种number、string、boolean、object、array、function、date、regexp。后两种通过get使用,不能使用new
![02f031e4a3e4761980ba612041123a22.png](https://i-blog.csdnimg.cn/blog_migrate/09de116f0ec5c06ecba69a0091bf941f.jpeg)
![5381f04fa84ed85540e5d5acf97de23a.png](https://i-blog.csdnimg.cn/blog_migrate/2c1ea74b3da9290718bdd02d8660c3dc.jpeg)
- JavaScript
JavaScript是一种轻量的、解释型的、面向对象的头等函数语言,是一种动态的基于原型和多凡事的脚本语言,支持面向对象、命令式和函数式的编程风格。
对比:
![3cdc2b8014ba2d9175d8085400f9bebc.png](https://i-blog.csdnimg.cn/blog_migrate/5929fe090e19b8fbef6776cb468d3e2b.jpeg)
![6066f7433fe9152b8cf65e8193a22579.png](https://i-blog.csdnimg.cn/blog_migrate/d1bfce31a747d8c94a6ae4d2eaf25124.jpeg)
![fb58ded0e7256a81ed48e896562ad67c.png](https://i-blog.csdnimg.cn/blog_migrate/eeeefbb2e6b9770d787e4dd9ec24bde1.jpeg)
![65a79a9e27b6895a1c03a3d295aca6b0.png](https://i-blog.csdnimg.cn/blog_migrate/6a679724b260f9d694665ebd80799e5d.jpeg)
9、MINA框架详解
View视图层、App Service逻辑层、Native系统层
视图层和逻辑层独立线程运行,通过JSBridge实现通信。
![66ac7971208b32202038fcd397887ccf.png](https://i-blog.csdnimg.cn/blog_migrate/041cfcdfd691d171f3cbf2d61b32d661.jpeg)
10、小程序运行机制
- 启动
启动分冷启动和热启动两种,
冷启动是首次打开和微信主动销毁再次打开时;
热启动是已经打开过之后一定时间内再次打开。
主动销毁:超过5分钟或5s内多次告警
冷启动遇到更新时会异步加载,下次打开才能应用。
- 加载
![066ac8ce7082800ce57221be479cf8de.png](https://i-blog.csdnimg.cn/blog_migrate/5b01791e6895faa04d68b48bb46241ec.jpeg)
10、生命周期
- 程序生命周期
![4220386aac27994862c971a8e90c61d7.png](https://i-blog.csdnimg.cn/blog_migrate/c5621cdc0ddb793babd012a23c762627.jpeg)
- 页面生命周期
![0b152fdf7e00e7f1970344cfaa5b49a5.png](https://i-blog.csdnimg.cn/blog_migrate/58cf2a9215840cd35814e1b82ac56edb.jpeg)
- 示例
![41a5582dfd0f10ceae070d06e7ed4a09.png](https://i-blog.csdnimg.cn/blog_migrate/947917a8797deac7593debdd55fb8e75.jpeg)
11、页面路由
页面路由全部由框架来管理,共有6种路由方式:
![838d2ba4662e15e4b1e1fdc91f32b2c4.png](https://i-blog.csdnimg.cn/blog_migrate/3c4b4f620176bac6c44ad6b76604489d.jpeg)
路由触发时机
![66752ae0169b095eeb382a43c29717e2.png](https://i-blog.csdnimg.cn/blog_migrate/564f36c0261e8568d8af1b5da85ec103.jpeg)
![d0232bf7de320d05404d8c77ae2b60bc.png](https://i-blog.csdnimg.cn/blog_migrate/d23b052e4455885605ddd9db996ac70b.jpeg)
12、小程序事件流
通过事件实现视图层和逻辑层进行通讯。
![d50263171c828f17b9418573b7f531b9.png](https://i-blog.csdnimg.cn/blog_migrate/65c8a56944b556fa84c62b85b795cdc4.jpeg)
![af1c223184359f907d373e71fd217986.png](https://i-blog.csdnimg.cn/blog_migrate/800276975b12d3f7a7b34da31b59f97a.jpeg)
![a0f0fbdd3cf9596a80cc91b89cfa2195.png](https://i-blog.csdnimg.cn/blog_migrate/276ba438ea6d0fe270b5995bed2a24a2.jpeg)
最权威的学习文档:
微信小程序开发文档 https://developers.weixin.qq.com/miniprogram/dev/index.html