由于工作需要,笔者曾经参与过一个微信小程序与SAP系统集成的项目,所以从零开始学习微信小程序的开发知识。在这里我通过一系列文章分享我所学到的知识,希望对相关的学习者有所帮助。
本教程的前三篇文章:
通过本系列前三篇的介绍 微信小程序开发 ,您已经对微信小程序的视图和控制器、微信调试器的使用以及如何使用微信平台提供的Public API有了基本的了解。在此基础上,本文让我们进一步研究微信小程序的页面跳转路由设计。
微信小程序页面跳转路由设计
在本教程系列的前六篇文章中,我们研究了一个视图。现在让我们创建第二个视图,然后实现从第一个视图到第二个视图的跳转。
先发展第二种观点:
<view class="container log-list">
<block wx:for="{{logs}}" wx:for-item="log">
<text class="log-item">{{index + 1}}. {{log}}</text>
</block>
</view>
做过Angular开发的朋友一定对上面的视图设计不陌生。该视图的数据源由模型日志提供,为列表结果。列表中每个元素的数据源是模型日志中的一条记录,用log表示。
为了让日志看起来更整洁,每条日志的索引显示在日志内容之前。由于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绑定了一个tap函数bindViewTap:
第一个控制器index.js中bindViewTap的实现:
bindViewTap: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
跳转还是通过微信小程序提供的APIwx.navigateTo:
保留当前页面,跳转到app中的某个页面,使用wx.navigateBack返回原页面。
学习了微信小程序页面的路由和跳转后,我们来进行一个实际的需求开发。
自动获取微信小程序中当前手机的经纬度并转换为地址
效果:我在手机上打开微信小程序,它会自动显示我当前的地理位置:
具体步骤:
使用微信提供的getLocationAPIjssdk获取经纬度;调用高德地图的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 响应:
如何使用微信开发者工具调试微信访问的网页
假设我使用Vue开发一个web应用,需要在手机微信中访问和调试。我可以使用微信开发者工具按照本文介绍的步骤进行调试。
假设我的web应用的访问入口是如下公众号菜单的“预约”按钮:
那么为了能够在微信开发者工具中调试,需要先进入公众号后台,在网页开发者工具中,添加开发者自己的微信账号:
点击“绑定开发者账号”:
输入要绑定的微信账号:
点击绑定 小程序开发制作 ,微信账号会收到消息询问是否绑定:
单击同意以完成绑定。
接下来开发微信小程序开发微信小程序,将要调试的web应用的url放到微信开发者工具的地址栏中。回车后,微信开发者工具中会弹出一个查询窗口。在与 Chrome DevTools 调试器相同的界面中进行单步调试。
粘贴到地址栏中的 url 非常特别。
appid=后的值是从微信公众号控制台复制的appid:
redirect_uri,也就是我们开发的web应用,部署到服务器后生成的url需要经过url encode处理:
url准备好后开发微信小程序,粘贴到微信开发者工具的地址栏,回车,会看到一个对话框,询问是否允许公开我们的信息:
点击允许后,就可以在微信开发者工具中进行单步调试,就像使用Chrome开发者工具的调试器一样:
总结
本文首先介绍了微信小程序多页面中路由跳转的设计,然后获取手机当前的经纬度并转换为地址,进一步了解微信小程序是如何消费微信平台的提供公共 API 方法。
本教程的前三篇文章:
发现、改变
探知、求新
共享,感恩一路相伴
昱远品牌形象已完成全面升级
点击访问新官网