微信小程序中获取用户地址

问题:在微信小程序官方文档中,有一个获取用户收货地址 wx.chooseAddress 的api,我在使用的时候有一个问题,就是在点击 获取收获地址 后点击 取消,然后不能继续点击这 获取收获地址 ,这里得清缓存后才能再次点击。在这里插入图片描述在这里插入图片描述
解决:要先获取用户收货地址需要用户点击授权,获取权限的api: wx.getSetting ,可以通过这个api去判断用户是否点击的是 确定 还是 取消 ,然后再去做一下的判断。

<!--页面代码-->
<view class="revice_address_row">
    <view class="address_btn">
        <button bindtap="handleChooseAddress" type="primary" plain>获取收货地址</button>
    </view>
    <view>
        {{user.name}}{{user.cityName}}
    </view>
</view>
// js代码
Page({
  data:{
    user:{
      name:"",
      cityName:""
    }
  },

  //点击 收获地址
  handleChooseAddress(){
    // 获取用户收货地址   (有小bug,点击后点取消,然后不能再次点击)
    // wx.chooseAddress({
    //   success:(result)=>{
    //     console.log(result)
    //   }
    // })

    // 正确流程:
    // 1.获取 权限状态
    wx.getSetting({
      success: (result) => {
        console.log(result)
        // 2. 获取权限状态 
        // 主要发现一些 属性名很怪异的时候 都要使用 [] 形式来获取属性
        const scopeAddres=result.authSetting["scope.address"];
		// 判断用户的权限状态
		if(scopeAddres===true||scopeAddres===undefined){
          wx.chooseAddress({
            success: (result1) => {
              console.log(result1)
              //获取数据
              this.setData({
                user:{
                  name:result1.userName,
                  cityName:result1.cityName
                }
              })
            }
          });
        }else{
          // 3. 用户 以前拒绝过授予权限  先引导用户打开权限页面
          wx.openSetting({
            success: (result2) => {
              // 4.可以调用  获取收获地址代码
              wx.chooseAddress({
                success: (result3) => {
                  console.log(result3)
                  // 获取数据
                  this.setData({
                    user:{
                      name:result3.userName,
                      cityName:result3.cityName
                    }
                  })
                }
              });
            }
          });
        }
      }
    });
  }
})

点击确定后的流程:
在这里插入图片描述
下面的用户信息就显示出来了
在这里插入图片描述

点击取消后的流程:
点击取消后再次点击获取收获地址,会进入权限设置,后面的按钮打开,然后点击返回,就可以获取到用户的信息了(走了确定的流程)
在这里插入图片描述
↓↓↓代码嵌套看起来复杂怎么办,优化一下↓↓↓
1.创建一个asyncWx.js文件,封装起来,以后维护也方便:

/**
 *  promise 形式 getSetting
*/
export const getSetting = () => {
    return new Promise((resolve, reject) => {
        wx.getSetting({
            success: (result) => {
                resolve(result);
            },
            fail: (err) => {
                resolve(err);
            }
        });
    })
}

/**
 *  promise 形式 chooseAddress
*/
export const chooseAddress = () => {
    return new Promise((resolve, reject) => {
        wx.chooseAddress({
            success: (result) => {
                resolve(result);
            },
            fail: (err) => {
                resolve(err);
            }
        });
    })
}

/**
 *  promise 形式 openSetting
*/
export const openSetting = () => {
    return new Promise((resolve, reject) => {
        wx.openSetting({
            success: (result) => {
                resolve(result);
            },
            fail: (err) => {
                resolve(err);
            }
        });
    })
}

在页面js引入:

import { getSetting, chooseAddress, openSetting } from "../../utils/asyncWx.js"

Page({
  data: {
    user: {
      name: "",
      cityName: ""
    }
  },

  //点击 收获地址
  async handleChooseAddress() {
    try {
      //1.获取权限  权限状态
      const res1 = await getSetting();
      const scopeAddres = res1.authSetting["scope.address"];
      //2.判断 权限状态
      if (scopeAddres === false) {
        //3.先诱导用户打开授权页面
        await openSetting()
      }
      //4.调用获取收获地址 api
      const address = await chooseAddress();
      console.log(address);
      this.setData({
        user: {
          name: address.userName,
          cityName: address.cityName
        }
      })
      // 5.将地址存入缓存中
      wx.setStorageSync("address", address);
    } catch (error) {
      console.log(error)
    }
})

现在是不是变的方便又简洁了呀!

这是简单的获取用户地址的方法以及流程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值