← 返回目录

第7章 莫凡商城的获取收货地址功能设计

第 7 / 9 卷作者:刘刚、高伟南、李华威日期:

第7章莫凡商城的获取收货地址功能设计

某用户在微信小程序上浏览各类商品时看中了一件衣服,希望能准确填写收货地址,以确保顺利收到商品。微信小程序提供了电商收货地

址和地图相关API,点击收货地址栏,系统将自动定位用户的当前位置,并显示附近的地图。这样,用户可以轻松选择已有的收货地址,

或者使用地图工具手动标记新的地址,准确地填写收货地址信息,享受安心购物。微信小程序的电商收货地址功能和地图相关API为用户提

供了便捷的购物体验。

获取收货地址是购物App和小程序经常会用到的一个功能,莫凡商城也需要从用户那里获取收货地址。获取收货地址会应用到位置API、收货

地址API和地图组件及地图API。本章将综合应用这些知识来完成莫凡商城获取收货地址功能的设计。

图 318-1
图 318-1

7.1位置API

微信小程序的位置API包括获得当前位置API、选择位置API、打开位置 API、开启/停止接收位置信息API、监听实时地理位置API,运用这些

API可以完成和位置相关的设计。

7.1.1 获得当前位置API、选择位置API、打开位置
API

微信小程序提供了wx.getLocation()、wx.chooseLocation()、 wx.openLocation()3个API。

1.wx.getLocation()

使用wx.getLocation()可以获得当前位置信息,包括当前位置的地理坐标、设备移动速度,用户退出小程序后,此接口无法调用。

接口需要传递位置类型type。Type的默认值为wgs84,返回GPS坐标,值为gcj02时返回可用于wx.openLocation()的坐标。

接口调用成功后,返回参数说明如表7.1所示。

表7.1 wx.getLocation()返回参数说明参数说明latitude纬度,浮点数,范围为−90〜90,负

数表示南纬longitude经度,浮点数,范围为−180〜180,负数表示西经speed速度,浮点数,单位为m/saccuracy

位置的精确度altitude高度,单位为mverticalAccuracy垂直精度,单位为m(Android系统无法获取,返回0)

horizontalAccuracy水平精度,单位为m

示例代码如下:

Page({

onLoad:function(){

wx.getLocation({

type: 'wgs84',

success: function(res) {

var latitude = res.latitude;

console.log("纬度="+latitude);

var longitude = res.longitude;

console.log("经度="+longitude);

var speed = res.speed;

console.log("速度="+speed);

var accuracy = res.accuracy;

console.log("精确度="+accuracy);

}

})

}

})

2.wx.chooseLocation()

使用wx.chooseLocation()可以打开地图来选择位置,调用前需要用户授权scope.user Location,接口调用成功后,返回参数说明如表7.2所

示。

表7.2 wx.chooseLocation()返回参数说明参数说明latitude纬度,浮点数,范围为−90〜

90,负数表示南纬longitude经度,浮点数,范围为−180〜180,负数表示西经name位置名称address详细地址

示例代码如下:

Page({

onLoad:function(){

wx.chooseLocation({

success: function(res){

console.log(res);

}

})

}

})

3.wx.openLocation()

使用wx.openLocation()可以打开微信内置地图查看位置,其返回参数说明如表7.3所示。

表7.3 wx.openLocation()返回参数说明参数类型是否必填说明latitudefloat是纬度,范围为

−90〜90,负数表示南纬longitudefloat是经度,范围为−180〜180,负数表示西经scaleint否缩放比例,范围为5

〜18,默认值为18namestring否位置名称addressstring否地址的详细说明successfunction是接口调用成功的回调

函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失败都会

执行)

示例代码如下:

Page({

onLoad:function(){

wx.getLocation({

type: 'gcj02', //返回可以用于wx.openLocation()的经纬度

success: function(res) {

var latitude = res.latitude

var longitude = res.longitude

wx.openLocation({

latitude: latitude,

longitude: longitude,

scale: 28

})

}

})

}

})

7.1.2 开启/停止接收位置信息API

微信小程序提供wx.startLocationUpdate()来开启小程序进入前台时接收位置信息,调用前需要用户授权scope.userLocation。

微信小程序提供wx.startLocationUpdateBackground()来开启小程序进入前、后台时均接收位置信息,调用前需要用户授权

scope.userLocationBackground,用户授权后,小程序在运行或进入后台时均可接收位置变化信息。

微信小程序提供wx.stopLocationUpdate()来关闭对实时位置变化的监听,调用后前、后台都将停止接收信息。

7.1.3 监听实时地理位置API

使用wx.onLocationChange()可以监听实时地理位置变化事件,需要结合wx.startLocation UpdateBackground()、wx.startLocationUpdate()使

用。wx.onLocationChange()返回参数说明如表7.4所示。

表7.4 wx.onLocationChange()返回参数说明参数说明latitude纬度,浮点数,范围为

−90〜90,负数表示南纬longitude经度,浮点数,范围为−180〜180,负数表示西经speed速度,单位为

m/saccuracy位置的精确度altitude高度,单位为mverticalAccuracy垂直精度,单位为m(Android系统无法获取,

返回0)horizontalAccuracy水平精度,单位为m

示例代码如下:

const _locationChangeFn = function(res) {

console.log('location change', res)

}

wx.onLocationChange(_locationChangeFn)

wx.offLocationChange(_locationChangeFn)

微信小程序使用wx.offLocationChange()来取消监听实时地理位置变化事件。

7.2收货地址API

微信小程序提供了收货地址API来获取用户的收货地址,可调出用户编辑收货地址的原生界面,并在用户编辑完成后返回用户选择的地址,

调用前需要用户授权scope.address。收货地址API调用成功后的返回值的属性如表7.5所示。

表7.5 收货地址API调用成功后的返回值的属性属性类型说明userNamestring收货人姓

名postalCodestring邮编provinceNamestring国标收货地址第一级地址cityNamestring国标收货地址第二级地址

countyNamestring国标收货地址第三级地址detailInfostring详细收货地址信息nationalCodestring收货地址国家

(地区)码telnumberstring收货人手机号码errMsgstring错误信息

示例代码如下:

Page({

onLoad: function() {

wx.chooseAddress({

success(res) {

console.log(res.userName)

console.log(res.postalCode)

console.log(res.provinceName)

console.log(res.cityName)

console.log(res.countyName)

console.log(res.detailInfo)

console.log(res.nationalCode)

console.log(res.telnumber)

}

})

}

})

7.3地图组件及地图API

在微信小程序开发中,基于地理位置的功能已成为提升用户体验的重要功能。微信小程序通过map组件和地图API,为开发者提供了便捷的

地理信息展示与交互能力,可广泛应用于出行导航、本地服务、物流追踪等场景。

7.3.1 地图组件map

微信小程序提供了地图功能,可通过map组件来开发与地图有关的应用,如共享单车、滴滴打车、外卖配送查询等,在地图上可以标记覆

盖物并指定一系列的坐标,如共享单车应用的地图上会标识共享单车的位置。

map组件的属性如表7.6所示。

表7.6 map组件的属性属性类型默认值说明longitudenumber中心经度latitudenumber中心纬度

scalenumber16缩放级别,取值范围为3〜20min-scalenumber3最小缩放级别max-scalenumber20最大缩放级别

markersarray标记点coversarray即将废弃,请使用markerspolylinearray路线circlesarray圆controlsarray控件

include-pointsarray缩放视野以包含所有给定的坐标点show-locationboolean指定是否显示带有方向的当前定位点

polygonsarray.<polygon>多边形subkeystring个性化地图使用的keylayer-stylenumber1个性化地图配置的style。

不支持动态修改rotatenumber0旋转角度,取值范围为0〜360,地图正北和设备y轴的夹角skewnumber0倾斜角

度,取值范围为0〜40,关于z轴的倾角enable-3Dbooleanfalse指定是否展示3D楼块show-compassbooleanfalse指

定是否显示指南针show-scalebooleanfalse指定是否显示比例尺enable-overlookingbooleanfalse指定是否开启俯视

enable-zoombooleantrue指定是否支持缩放enable-scrollbooleantrue指定是否支持拖动enable-rotatebooleanfalse

指定是否支持旋转enable-satellitebooleanfalse指定是否开启卫星地图enable-trafficbooleanfalse指定是否开启实

时路况enable-poibooleantrue指定是否展示POI(Point of Interest,关注点)enable-buildingboolean指定是否展

示建筑物settingobject配置项bindcallouttapeventhandle点击标记点对应的气泡时触发,e.detail =

{markerId}bindmarkertapeventhandle点击标记点时触发,e.detail = {markerId}bindcontroltapeventhandle点击

控件时触发,e.detail = {controlId}bindregionchangeeventhandle视野发生变化时触发bindtapeventhandle点击

地图时触发bindupdatedeventhandle在地图渲染更新完成时触发bindpoitapeventhandle点击地图POI时触发,

e.detail = {name, longitude, latitude}

markers标记点用于在地图上显示标记的位置,markers标记点的属性如表7.7所示。

表7.7 markers标记点的属性属性说明类型是否必填备注id标记点idnumber否marker点击事件回

调会返回此id。建议为每个marker设置number类型id,保证更新marker时有更好的性能latitude纬度number是浮

点数,范围为-90〜90longitude经度number是浮点数,范围为-180〜180title标注点名称string否点击某地点时显

示。callout存在时将被忽略zIndex显示层级numbericonPath显示的图标string是项目目录下的图片路径。支持相

对路径写法,以“/

”开头则表示小程序的相对根目录。也支持临时路径和网络图片rotate旋转角度number否顺时针旋转的角度,取

值范围为0〜360,默认值为0alpha标注的透明度number否默认值为1,不透明width标注图标的宽度number否默

认为图标实际宽度height标注图标的高度number否默认为图标实际高度callout自定义标记点上方的气泡窗口

objectlabel为标记点增加标签objectanchor经纬度在标记点的锚点。默认在底边中点object{x, y},x表示横向,取

值范围为(0,1);y表示纵向,取值范围为(0,1)。{x: 0.5, y: 1}表示底边中点aria-label无障碍访问。(属性)元素的

额外描述string

polyline用来指定一系列坐标点,从数组第一项连线至最后一项,其属性如表7.8所示。

表7.8 polyline坐标点的属性属性说明类型是否必填备注points经纬度数组array是

[{latitude:0,longitude:0}]color线的颜色string否以8位十六进制数表示,后两位表示alpha值,如#000000AAwidth

线的宽度number否dottedLine指定是否为虚线boolean否默认为falsearrowLine指定是否为带箭头的线boolean否默

认为false,微信开发者工具暂不支持该属性arrowIconPath更换箭头图标string否在arrowLine为true时生效

borderColor线的边框颜色string否borderWidth线的厚度number否

图 326-1
图 326-1

注意

地图组件的经纬度必填,如果不填,则默认是北京的经纬度。

示例代码如下:

<!-- map.wxml -->

<map id="map" longitude="113.324520" latitude="23.099994" scale="14"

bindcontroltap= "controltap" markers="{{markers}}"

bindmarkertap="markertap" polyline="{{polyline}}" bindregionchange="regionchange"

show-location style="width: 100%; height: 300px;"></map>

// map.js

Page({

data: {

markers: [{

id: 0,

latitude: 23.099994,

longitude: 113.324520,

width: 50,

height: 50

}],

polyline: [{

points: [{

longitude: 113.3245211,

latitude: 23.10229

},{

longitude: 113.324520,

latitude: 23.21229

}],

color:"#FF0000DD",

width: 2,

dottedLine: true

}]

},

regionchange(e) {

console.log(e.type)

},

markertap(e) {

console.log(e.markerId)

},

controltap(e) {

console.log(e.controlId)

}

})

地图界面效果如图7.1所示。

图 329-1
图 329-1

图7.1 地图界面效果

7.3.2 地图API

wx.createMapContext()是地图组件控制API,用来创建并返回 MapContext对象,它有以下8种方法。

  • MapContext.getCenterLocation():获取当前地图中心的经纬度,返

回的值基于GCJ-02坐标系,可以用于wx.openLocation()。

  • MapContext.moveToLocation():将地图中心移动到当前定位点,需

要配合map组件的show-location使用。

  • MapContext.getRegion():获取当前地图的视野范围。
  • MapContext.getRotate():获取当前地图的旋转角度。
  • MapContext.getScale():获取当前地图的缩放级别。
  • MapContext.getSkew():获取当前地图的倾斜角度。
  • MapContext.includePoints():缩小地图展示所有经纬度。
  • MapContext.translateMarker():平移标记点,带动画。

示例代码如下:

<!-- map.wxml -->

<map id="myMap" show-location />

<button type="primary" bindtap="getCenterLocation">获取位置</button>

<button type="primary" bindtap="moveToLocation">移动位置</button>

// map.js

Page({

onReady: function (e) {

// 使用wx.createMapContext()获取map上下文

this.mapCtx = wx.createMapContext('myMap')

},

getCenterLocation: function () {

this.mapCtx.getCenterLocation({

success: function(res){

console.log(res.longitude)

console.log(res.latitude)

}

})

},

moveToLocation: function () {

this.mapCtx.moveToLocation()

}

})

7.4项目实战:使用AI编程工具辅助实现立即购买

页面1
.任务目标

实现立即购买页面,包括选择收货地址设计、商品信息展示、快递说明、商品总价和提交订单区域设计。

2.任务实施

下面来实现莫凡商城小程序的立即购买页面。

(1)在app.json文件里添加立即购买页面路径“pages/buy/buy”。

(2)打开通义灵码,输入以下内容并发送,如图7.2所示。

微信小程序实现立即购买页面,立即购买页面第一个模块显示的是收货人的信息,包括收货人昵称(李华)、联系方式(18011111111)和

收货地址(北京市昌平区101),第二个模块显示商品店铺名称,店铺名称下面以下划线分开显示商品信息,商品信息分为左、右两部分展

示,左边展示商品图片、右边上部分展示商品名称,下部分展示价格和购买的数量,数量不可修改,只展示数字即可,以下画线隔开,继

续展示送货说明部分,送货说明部分分为左、右两部分,左边是“送货说明”标题,右边展示快递名称、送达时间,数据从接口获取,整个页

面底部固定显示总价和“提交订单”按钮。

图 332-1
图 332-1

图7.2 发送需求

3.AI生成

通义灵码根据需求生成了实现立即购买页面的代码,包括WXML布局、 WXSS样式及JS数据绑定,实现了收货信息、商品信息和快递信息展示

以及提交订单功能,如图7.3所示。

图 333-1
图 333-1

图7.3 通义灵码生成立即购买页面

4.优化建议

在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。

  • 对需求进行更加详细的说明,例如,给出收货地址的具体布局,让AI

编程工具生成更加符合需求的代码,就不用进行很多修改。

  • 分模块进行生成,例如先完成选择收货地址模块,再完成商品信息展

示和快递说明模块,最后完成底部的总价显示和“提交订单”按钮模块。

  • 把生成的示例接口替换成获取商品数据的真实接口,把真实接口返回

的数据渲染到页面上。

  • 根据自己的实际需求手动调整样式代码,使得页面美观大方。
5.页面展示

代码经过优化后,运行代码,页面样式如图7.4所示。

图 334-1
图 334-1

图7.4 立即购买页面

7.5项目实战:使用AI编程工具辅助实现收货地址

列表页面1
.任务目标

实现收货地址列表页面,包括收货地址列表、“新增地址”按钮、地址编辑按钮。

2.任务实施

下面来实现莫凡商城小程序的收货地址列表页面。

(1)在app.json文件里添加收货地址列表页面路径 “pages/address/address”。

(2)在address.json文件里配置收货地址列表导航标题“收货地址管理”,示例代码如下:

{

"navigationBarTitleText": "收货地址管理"

}

(3)打开通义灵码,输入以下内容并发送,如图7.5所示。

微信小程序实现商城收货地址列表页面,页面的底部有一个“新增地址”

按钮,列表上内容分为左、右两部分,左边部分第一行显示姓名和手机号,第二行显示详细地址,右边是编辑按钮,点击它可以跳转到新

增和编辑地址页面,数据从接口获取。

图 336-1
图 336-1

图7.5 发送需求

3.AI生成

通义灵码根据需求生成了实现收货地址列表页面的代码,包括WXML布局、WXSS样式及JS数据绑定,实现了收货地址信息展示、“新增地址”

按钮和编辑按钮,如图7.6所示。

图 336-2
图 336-2

图7.6 通义灵码生成收货地址列表页面

4.优化建议

在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。

  • 对需求进行更加细致的描述,例如描述收货地址列表中内容分为左、

右两部分,各占多少比例。

  • 把示例接口替换成真实的收货地址接口,把接口中返回的数据渲染到

页面上。

  • 根据自己的实际需求手动调整代码,使得页面简洁美观。
5.页面展示

代码经过优化后,运行代码,页面样式如图7.7所示。

图 338-1
图 338-1

图7.7 收货地址列表页面

7.6项目实战:使用AI编程工具辅助实现新增或编

辑地址页面1
.任务目标

实现新增或编辑地址页面,巩固表单相关组件的知识。

在莫凡商城收货地址列表页面中点击“新增地址”按钮或者编辑按钮,可以跳转到新增或编辑地址页面,可新增或编辑联系人、性别、手机号

码、所在城市、收货地址、门牌号信息。

2.任务实施

下面来实现莫凡商城小程序的新增或编辑地址页面。

(1)新增和编辑地址共用一个页面,在app.json文件里添加新增或编辑地址页面路径“pages/newAddress/newAddress”。

(2)打开通义灵码,输入以下内容并发送,如图7.8所示。

图 339-1
图 339-1

图7.8 发送需求

微信小程序实现新增或编辑地址页面,页面里面需要填写联系人、性别、手机号码、所在城市、收货地址、门牌号这些信息,性别用radio-

group实现,其余字段用input输入框实现,最下面有“确定”按钮,点击该按钮把输入的值传递给接口后,新增或修改地址成功。

3.AI生成

通义灵码根据需求生成了实现新增或编辑地址页面的代码,包括WXML 布局、WXSS样式及JS数据绑定,实现了新增地址和编辑地址的功能,

如图7.9所示。

图 340-1
图 340-1

图7.9 通义灵码生成新增或编辑地址页面

4.优化建议

在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。

  • 对需求进行更加详细的描述,例如详细描述我们需要的自定义表单样

式。

  • 如果是新增地址功能,点击确定按钮时候需要调用新增地址的接口,

这个时候我们把示例接口替换成新增地址接口,把参数传给接口,然后查看调用接口后的返回值,检查接口是否调用成功。

如果是编辑地址功能,点击确定按钮时候需要调用编辑地址的接口,这个时候我们把示例接口替换成编辑地址接口,把参数传给接口,然

后查看调用接口后的返回值,检查接口是否调用成功。

  • 根据自己的实际需求进行手动调整样式代码,使得页面简洁美观。
5.页面展示

代码经过优化后,运行代码,页面样式如图7.10所示。

图 342-1
图 342-1

图7.10 新增或编辑地址页面

全站分卷索引 · 9 卷
  1. 1第1章 AI编程工具与微信小程序
  2. 2第2章 莫凡商城小程序项目结构
  3. 3第3章 莫凡商城首页的静态布局设计
  4. 4第4章 莫凡商城首页的动态绑定设计
  5. 5第5章 莫凡商城的注册、登录功能
  6. 6第6章 莫凡商城的商品详情页设计
  7. 7第7章 莫凡商城的获取收货地址功能设计
  8. 8第8章 莫凡商城的支付功能及订单详情页设计
  9. 9第9章 小程序扩展应用