微信小程序知识梳理
公司有个项目使用了微信小程序开发,自己之前开发过支付宝小程序,感觉两者大同小异。由于微信的官方文档写的不尽人意,于是自己写一篇文章来整理微信小程序的开发流程、一些常用组件和常用的api等。
前期准备
这里闲聊一下微信小程序的本质:其实是微信app的一个webview页面,在这个webview页面里可以使用WeixinJsBridge提供的各种api。好处就是依托了微信这个超高流量的app,坏处就是性能和体积和一些功能受到限制。
微信开发者入驻
- 移步开发者入驻网站注册开发者账号,开发者账号用于小程序开发时的测试和小程序发布用。
创建小程序
移步小程序官网创建小程序,获取小程序的appId;在之后的小程序开发时,会有配置文件需要开发者填写appId。
开发环境安装
安装小程序IDE
小程序开发
小程序项目结构介绍
创建小程序之后会自动生成一些项目文件,下面介绍几个具有代表性的。
app.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30{
"pages": [
"pages/index/index", // 第一项为首页
"pages/logs/index"
],
"window": {
"navigationBarTitleText": "Demo",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/logs/index",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true,
"navigateToMiniProgramAppIdList": [
"wxe5f52902cf4de896"
]
}注意:tabbar只能用在首页[香菇],完整的配置项查看小程序配置文档。
app.css
作为全局样式,一般用来设置页面的背景、宽高。
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34App({
// 第一次打开
onLaunch(options) {
console.log(options.query); // {number:1}
console.log(options.path); // x/y/z
},
// 从后台被 scheme 重新打开
onShow(options) {
console.log(options.query); // {number:1}
console.log(options.path); // x/y/z
},
// 监听小程序隐藏
onHide() {
},
// 监听小程序错误
onError(error:String) {
},
// 全局分享配置
onShareAppMessage(object: Object) {
},
// 当 Promise 被 reject 且没有 reject 处理器时,会触发 onUnhandledRejection
onUnhandledRejection(object: Object) {
},
// 用于记录app的一些全局信息,比如token等。
// 在其他js页面通过getApp().globalData.token获取值
globalData: {
token: '',
name: '',
},
});pages目录
此目录存放小程序的页面,右击选择create page,ide自动给你生成如下相应的文件
4.1 xx.wxss (页面的css样式)
4.2 xx.wxml (页面的布局)
4.3 xx.js (页面的js)
4.4 xx.json(页面的配置信息)
components目录
此目录存放小程序的组建,右击选择create component,ide自动给你生成相应的文件
小程序的基础语法
数据类型
1.1 String:字符串
1
var str = "hello world"
1.2 Boolean:布尔值
1
var bol = true
1.3 Number:数值
1
var num = 5.6
1.3 Array:数组
1
var arr = []
1.4 Object:对象
1
var obj = null; let obj= null;
1.5 Date:日期
1
var date = getDate() // 生成Date需要使用getDate方法
1.6 Regexp:正则表达式
1
var reg = getRegExp(pattern[, flags]) // 生成Regexp需要使用getRegexp方法
1.7 Function:函数
1
2
3testFun() {
return true;
}1.8 数据类型判断
1
2
3console.log(arr.constructor // Array
// typeof能分辨出number、boolean和string,但是其他的类型只能识别是object
console.log(typeof arr) // object注释
如果你的代码写不出让人读注释的水平,那么你就老老实实写注释,OK?
1.1 单行注视
1
2// typeof能分辨出number、boolean和string,但是其他的类型只能识别是object
console.log(typeof arr) // object1.2 多行注视
1
2
3
4
5
6/*
* @obj 订单编号
*/
testFunc(obj) {
// 你的业务逻辑
}函数
3.1 函数定义同js,你说你不懂js?移步js语法
3.2 让外界的js文件使用你的js
1
2
3
4
5
6
7
8
9
10
11
12
13
14// util.js文件内容
export const getStatus = function (obj) {
// 你的业务逻辑
}
// 需要引用的js文件(index.js)
// 需要先import
import { getStatus } from '../util.js'
/*
* 获取订单数据
*/
rquestOrder(){
var order = ....
var status = util.getStatus(order.status) // 引用调用
}
小程序的常用接口
路由
1.1 wx.switchTab({url:””})
需要配合tabbar使用
1.2 wx.reLaunch({url:””})
关闭当前所有页面,跳转到应用内的某个指定页面
1.3 wx.redirectTo({url:””})
是关闭当前页面,跳转到应用内的某个指定页面,没有返回
1.4 wx.navigateTo({url:””})
从当前页面,跳转到应用内的某个指定页面,有返回
1.5 wx.navigateBack()
关闭当前页面,返回上一级或多级页面
下拉刷新
拨打电话
1
wx.makePhoneCall({number: '95888'})
网络请求
小程序线上支持https请求
小程序线上只支持后台配置的白名单访问,线下可以通过小程序详情配置忽略域名检查。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34// 一般我们会封装网络请求api到一个js文件(http.js)
// 提供一个默认的请求option,自己可以再修改其中的值
export const defaultOption = {
method: 'GET', //
header: {
'content-type': 'application/x-www-form-urlencoded',
},
timeout: 30000,
dataType: 'json',
responseType: 'text',
responseCharset:'utf-8',
}
// 提供一个请求调用
export const httpClient = (url,data,option) => {
return new Promise((resolve,reject)=>{
// 将所有可枚举属性的值从一个或多个源对象分配到目标对象
option = Object.assign({},defaultOption,option)
option.url = url
option.data = data || {} // 等同data==null?{}:data
option.success = async(res) => {
console.log(JSON.stringify(res))
resolve(res)
}
option.fail = (res) => {
console.log(res)
reject(res)
}
wx.request(option) // send request
});
}
// 外部使用
httpClient("your url",{"name":"whh"})文件上传(裸码版本)
1
2
3
4
5
6
7
8
9
10
11
12wx.uploadFile({
url: 'http://httpbin.org/post',
fileType: 'image',
fileName: 'file',
filePath: path,
success: res => {
my.alert({ title: '上传成功' });
},
fail: function(res) {
my.alert({ title: '上传失败' });
},
});缓存
单个小程序的缓存大小为10M,提供的接口为分同步和异步。
后续