由于工作需要,笔者曾经参与过一个微信小程序与SAP系统集成的项目,所以从零开始学习微信小程序的开发知识。在这里我通过一系列文章分享我所学到的知识,希望对相关的学习者有所帮助。
本教程的前三篇文章:
通过本系列前三篇的介绍,您已经对微信小程序的视图和控制器、微信调试器的使用以及如何使用微信平台提供的Public API有了基本的了解。在此基础上,本文让我们进一步研究微信小程序的页面跳转路由设计。
微信小程序页面跳转路由设计
在本教程系列的前六篇文章中,我们研究了一个视图。现在让我们创建第二个视图,然后实现从第一个视图到第二个视图的跳转。
先发展第二种观点:
{{index + 1}}. {{log}}
做过Angular开发的朋友一定对上面的视图设计不陌生。该视图的数据源由模型日志提供,为列表结果。列表中每个元素的数据源是模型日志中的一条记录,用log表示。
为了让日志看起来更整洁,每条日志的索引显示在日志内容之前。由于日志的索引是从0开始的,所以在索引前加上一个{{index + 1}},这样显示的索引更符合普通人的阅读习惯。
此视图的控制器:
//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))
})
})
}
})
控制器logs.js的实现:
调用控制器中的 Page 构造函数微信小程序如何开发,为当前控制器指定一个名为 logs 的数据模型。
这个数据模型的值填充是通过微信框架提供的API wx.getStorageSync获取的。
wx.getStorageSync的含义在微信小程序官网上有定义:从本地缓存中同步获取指定key对应的内容。
第二个视图的UI和控制器已经开发好了 支付宝小程序开发 ,剩下的就是在第一个视图中定义一个触发点微信小程序如何开发,这样就可以触发跳转到第二个视图。
我通过第一个视图上的属性 bindtap 绑定了一个点击函数 bindViewTap:
第一个控制器index.js中bindViewTap的实现:
bindViewTap: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
跳转还是通过微信小程序提供的API wx.navigateTo:
保持当前页面,跳转到app中的一个页面,使用wx.navigateBack返回到原来的页面。
学习了微信小程序页面的路由和跳转后,我们来进行一个实际的需求开发。
自动获取微信小程序中当前手机的经纬度并转换为地址
效果:我在手机上打开微信小程序,它会自动显示我当前的地理位置:
具体步骤:
使用微信jssdk提供的getLocation接口获取经纬度;调用高德的api使用经纬度交换地址的文字描述。
wx.ready(() => {
wx.getLocation({
type: "gcj02",
success: function(res) {
var location = "&location=" + res.longitude + "," + res.latitude;
ReservationService.getGeocode(location).then(response => {
if (response.data.status === "1" && response.data.info === "OK" ) {
self.country = response.data.regeocode.addressComponent.country;
self.city = response.data.regeocode.addressComponent.city;
var express = "/" + self.country + "|" +
response.data.regeocode.addressComponent.province + "|" + self.city + "|" + response.data.regeocode.addressComponent.district + "|" +
response.data.regeocode.addressComponent.township + "/g";
self.address = response.data.regeocode.formatted_address.replace(eval(express), ""
);
} else {
// get location error, plz input address
alert("无法获取地址信息,请稍后再试");
}
});
}
});
ReservationService.getGeocode 的实现:
getGeocode(location) {
const key = '此处填入您高德地图app的key';
return axios.post('https://restapi.amap.com/v3/geocode/regeo?key=' + key + location);
}
看下面的例子,使用高德地图 API 将经纬度转换成文字描述的地址,并使用 postman 发送请求:
API 响应:
{
"status": "1",
"regeocode": {
"addressComponent": {
"city": [],
"province": "北京市",
"adcode": "110101",
"district": "东城区",
"towncode": "110101001000",
"streetNumber": {
"number": "44号",
"location": "116.39795,39.9097239",
"direction": "东北",
"distance": "117.874",
"street": "广场东侧路"
},
"country": "中国",
"township": "东华门街道",
"businessAreas": [
{
"location": "116.3998109423077,39.90717459615385",
"name": "天安门",
"id": "110101"
},
{
"location": "116.39981058278138,39.92383706953642",
"name": "景山",
"id": "110101"
},
{
"location": "116.4118112683418,39.91461494422115",
"name": "王府井",
"id": "110101"
}
],
"building": {
"name": "天安门",
"type": "风景名胜;风景名胜相关;旅游景点"
},
"neighborhood": {
"name": [],
"type": []
},
"citycode": "010"
},
"formatted_address": "北京市东城区东华门街道天安门"
},
"info": "OK",
"infocode": "10000"
}
如何使用微信开发者工具调试微信访问的网页
假设我使用vue开发一个web应用,需要在手机微信中访问和调试。我可以使用微信开发者工具按照本文介绍的步骤进行调试。
假设我的web应用的访问入口是如下公众号菜单的“预约”按钮:
那么为了能够在微信开发者工具中调试,需要先进入公众号后台,在网页开发者工具中 支付宝小程序开发 ,添加开发者自己的微信账号:
点击“绑定开发者账号”:
输入要绑定的微信账号:
点击绑定,微信账号会收到消息询问是否绑定:
单击同意以完成绑定。
接下来,将要调试的web应用的url放到微信开发者工具的地址栏中。回车后,微信开发者工具中会弹出一个查询窗口。在与 Chrome DevTools 调试器相同的界面中进行单步调试。
粘贴到地址栏中的 url 非常特别。
appid=后面的值为从微信公众号控制台复制的appid:
redirect_uri,也就是我们开发的web应用,部署到服务器后生成的url需要经过url encode处理:
这个url准备好后,粘贴到微信开发者工具的地址栏微信小程序如何开发,回车,你会看到一个对话框窗口询问我们是否允许公开信息:
点击允许后,就可以在微信开发者工具中进行单步调试,就像使用Chrome开发者工具的调试器一样:
总结
本文首先介绍了微信小程序多页面中路由跳转的设计,然后获取手机当前的经纬度并转换为地址,进一步了解微信小程序是如何消费微信平台的提供公共 API 方法。
本教程的前三篇文章:
发现、改变
探知、求新
共享,感恩一路相伴
昱远品牌形象已完成全面升级
点击访问新官网