1.在小程序中,一般在支付订单时,会获取用户的收货地址,分为两种情况:一是用户第一次登录时需要获取收货地 二是用户已经登录过,所以只需要选择地址
情况一:
情况二:
获取用户的收货地址的详细流程:
1 写一个button按钮,绑定点击事件
2调用小程序内置api获取用户的收货地址wx.chooseAddress
3获取用户对小程序所授予获取地址的权限状态scope
(1)假设用户点击获取收货地址的提示框确定authSettingscope.address
scope值true直接调用获取收货地址
(2) 假设用户从来没有调用过收货地址的api
scopeundefined直接调用获取收货地址
(3)假设用户点击获取收货地址的提示框取消
scope值false
(1)诱导用户自己打开授权设置页面(wx.openSetting)当用户重新给与获取地址权限的时候
(2)获取收货地址
4把获取到的收货地址存入到本地存储中
2.定义页面布局以及样式(省略) button绑定一个点击事件
<view class="cart_add"><view class="cart_address" wx:if="{{!address.userName}}"><button class="cart_add_address" bindtap="handleChooseAddress" type="primary" plain>+ 获取收货地址</button></view >
3.在data中定义数据,address用来获取本地存储中的收货地址
data{address: {},),onShow() {// 获取缓存中的收货地址信息const address = wx.getStorageSync("address");this.setData({ address });},
4.点击button按钮触发相应的事件 获取用户对小程序是否授予 获取地址的权限 即scope。只用用户确认允许授权才能获取微信地址
// 点击 收货地址async handleChooseAddress() {try {// 获取 权限状态const res1 = await getSetting();const scopeAddress = res1.authSetting["scope.address"];// 判断 权限状态if (scopeAddress === false) {await openSetting();}// 调用获取收货地址的 apilet address = await chooseAddress();address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;// 存入到本地中wx.setStorageSync("address", address);} catch (error) {console.log(error);}},