微信小程序自从上线以来就获得了广泛关注,而且事实证明这是一个相当成功的项目。微信小程序依托微信和微信支付的巨大用户量,如今主要应用在这么几个方面:
无论如何,微信是一个十分封闭的生态,一切都要受到腾讯公司的监管,如果全世界的人都像我们开发者一样追求开源和自由,微信小程序不会有人去用的。然而,事实却不是这样,大多数普通人,甚至刚学会如何用手机的大爷大妈,他们只是需要一个拿来就能用,点两下就出结果的软件。微信这样一个近乎于基础设施的存在,让腾讯公司手握巨大的用户资源,小程序能流行也就顺理成章了。
本系列笔记简要介绍微信小程序环境搭建、开发要点等内容,官网的文档非常详尽,如果有Android开发和现代化前端开发的基础,基本花上半小时把文档过一遍就可以着手开发了。
进入以下链接,选择注册,按照提示操作。
注:申请微信公众平台开发者账号需要你的实名信息、身份证号,开发的程序会受到审核和监管。
开发过程中,我们可以申请一个测试号,测试号便于调试和测试部署,但是不能对公众发布。
https://developers.weixin.qq.com/sandbox
申请成功后,我们会得到测试号的AppID和AppSecret。
微信小程序团队开发了一款IDE,感觉就是魔改Chrome里运行了一个魔改VSCode,能够方便小程序的开发,集成了代码编写、Chrome调试工具、微信小程序模拟器、打包功能。
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
注:这个工具貌似还有些bug,我就遇到几次代码打不开的情况,不过不影响开发。
app.js
:调用App()
,指定一些全局逻辑app.wxss
:全局wxss样式表文件app.json
:全局配置project.config.json
:IDE配置,便于在不同电脑上快速配置相同的开发环境pages
:这个目录中存放的是小程序的页面,每个页面对应一个文件夹pages/<页面名>/<页面名>.wxml
:页面的wxml布局文件pages/<页面名>/<页面名>.wxss
:页面的wxss样式表文件,在app.wxss
基础上覆盖pages/<页面名>/<页面名>.js
:页面的业务逻辑pages/<页面名>/<页面名>.json
:页面的配置,在app.json
基础上覆盖utils
:工具函数目录微信中打开小程序,小程序的代码会下载到用户手机中,然后首页就会加载。
这里我们观察一下app.json
,其中pages
字段配置的第一个页面就是“首页”,window
字段配置的是微信小程序外框的颜色等信息,微信小程序加载会受到这些配置信息影响。
app.json
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
每个页面都由布局文件(wxml)、样式表文件(wxss)、逻辑代码(js)、配置文件(json)组成。下面是pages/logs/logs.js
,其中调用了Page()
初始化了页面,onLoad()
就是页面加载时的执行逻辑。
//logs.js
const util = require('../../utils/util.js')
Page({
data: {
logs: []
},
onLoad: function () {
this.setData({
logs: (wx.getStorageSync('logs') || []).map(log => {
return util.formatTime(new Date(log))
})
})
}
})
在布局文件wxml
中,每个XML节点都是基于组件的,而不像html是基于DOM树的,使用起来更加方便。
logs.wxml
<!--logs.wxml-->
<view class="container log-list">
<block wx:for="{{logs}}" wx:for-item="log">
<text class="log-item">{{index + 1}}. {{log}}</text>
</block>
</view>
微信小程序的众多能力都以API的形式提供,例如获取用户信息、微信支付等功能,
我们创建项目时,已经创建了一个基础工程,它包含index
和logs
两个页面,我们可以在模拟器中预览,也可以在自己手机上预览。
这里我们写一个简单的例子,创建一个页面,显示地图,要求地图上的地理位置是该用户当前的地理位置。
在onLoad()
中插入如下代码,获取用户的地理位置信息,然后调用setData()
使得页面能够获取到该数据:
wx.getLocation({
type: 'wgs84',
success: (res) => {
var latitude = res.latitude // 纬度
var longitude = res.longitude // 经度
this.setData({
latitude,
longitude
});
}
})
在wxml文件中,加入<map>
组件,并设置其经纬度:
<map latitude="{{latitude}}" longitude="{{longitude}}"></map>