当前位置: 首页 > news >正文

微信小程序151~160

1.地理定位功能

通过小程序开发平台通过的API,来获取用户的地理位置。用户在使用小程序时,可以授权小程序获取自己的地理位置。

  1. wx.getLocation():获取当前地理位置
  2. wx.chooseLocation(): 打开地图选择位置

开发=》开发管理=》接口设置
使用方法:
在这里插入图片描述

// index.js// 获取用户地理位置信息async onLocation() {// 获取经度,纬度,高度const res = await wx.getLocation()//打开地图让用户选择位置const res = await wx.chooseLocation()}// app.json"requiredPrivateInfos": ["getLocation","chooseLocation"],"permission": {"scope.userLocation": {"desc": "获取地理位置信息用于填写收货地址"}}
2. 拒绝授权的解决方案

在这里插入图片描述

 async onLoaction() {try {// 用户拒绝授权以后,如果再次调用 getLocation,不会在弹出授权弹窗const res = await wx.getLocation()console.log(res)} catch (error) {wx.toast({ title: '您拒绝授权' })}}

在这里插入图片描述
获取授权状态
wx.getSetting()获取用户所有授权信息,查询用户是否授权了位置信息
authSetting只包含小程序向用户请求的所有权限,以及授权的结果
scope.userLoaction用户是否授权获取了地理位置信息
如果小程序没有向用户发起授权请求,authSetting中没有scope.userLoaction属性
如果允许授权,返回值就是true,反之

 async onLoaction() {// wx.getSetting()获取用户所有授权信息,查询用户是否授权了位置信息// authSetting只包含小程序向用户请求的所有权限,以及授权的结果const { authSetting } = await wx.getSetting()//scope.userLoaction用户是否授权获取了地理位置信息// 如果小程序没有向用户发起授权请求,authSetting中没有scope.userLoaction属性// 如果允许授权,返回值就是true,反之console.log(authSetting['scope.userLoaction'])}

整体逻辑

 async onLocation() {// authSetting 获取小程序已经向用户申请的权限,并且会返回授权的结果const { authSetting } = await wx.getSetting()// scope.userLocation 用户是否授权小程序获取位置信息console.log(authSetting['scope.userLocation'])// 判断用户是否拒绝了授权if (authSetting['scope.userLocation'] === false) {const modalRes = await wx.modal({title: '授权提示',content: '需要获取地理位置,请确认授权'})if (!modalRes) return wx.toast({ title: '您拒绝了授权' })const { authSetting } = await wx.openSetting()if (!authSetting['scope.addPhoneCalendar.userLoaction']) return wx.toast({ title: '授权失败' })const locationRes = await wx.getLocation()console.log(locationRes)} catch (error) {wx.toast({ title: '您拒绝授权获取位置信息' })} else {try {const locationRes = await wx.getLocation()console.log(locationRes)} catch (error) {wx.toast({ title: '您拒绝授权获取位置信息' })}}}

用button打开授权页面

<button type="primary" open-type="openSetting">打开授权页面</button>
3. 腾讯位置服务

在这里插入图片描述

4. LBS逆地址解析
  1. 在项目中引入SDK核心类
  2. 在onLoad中实例化API核心类,同时配置创建的key
  3. 使用实例方法reverseGeocoder方法进行逆地址解析,将提供的坐标转换为详细的地址位置信息

如果在进行逆地址解析的时候,如果发现key只能使用一次,需要在腾讯位置服务后台配置

// 引入QQMapWX核心类
import QQMapWX from '../../../../../libs/qqmap-wx-jssdk'// 获取用户地理位置信息async onLocation() {// 获取 经度 ,纬度 ,高度const res = await wx.getLocation()//打开地图让用户选择位置// latitude纬度 longitude经度 name搜索的地点const { latitude, longitude, name } = await wx.chooseLocation()// 逆地址解析this.qqmapwx.reverseGeocoder({location: {longitude,latitude},success: (res) => {const { adcode, province, city, district } = res.result.ad_infoconst { street, street_number } = res.result.address_componentconst { standard_address } = res.result.formatted_addressthis.setData({// 省provinceName: province,provinceCode: adcode.replace(adcode.substring(2, 6), '0000'),// 市cityName: city,cityCode: adcode.replace(adcode.substring(4, 6), '00'),// 区districtName: district,districtCode: district && adcode,// 详细地址address: street + street_number + name,// 完整地址fullAddress: standard_address + name})}})},onLoad() {this.qqmapwx = new QQMapWX({key: 'JA5BZ-ZYYWT-BHYXZ-LXUVP-JZ3D2-7RFD4'})}
5.async-validator基本使用
// 引入构造函数
import Schema from 'async-validator'
Page({data: {name: ''},// 对数据进行验证onValidator() {// 定义验证规则const rules = {// key验证规则的名字,名字要和验证的数据保持一致name: [{ required: true, message: 'name 不能为空' },{ type: 'string', message: 'name不是字符串' },{ min: 2, max: 3, message: '名字最少两个字,最多三个字' }// pattern 使用正则对数据进行验证// { pattern: '', message: '' }// validator 自定义验证规则//   { validator: () => {} }]}// 对构造函数进行实例化, 同时传入验证规则const validator = new Schema(rules)// 需要调用 validate 实例方法,对数据进行验证// 第一个参数:需要验证的数据,要求数据是一个对象// validate 方法只会验证和验证规则同名的字段// 第二个参数:是一个回调函数validator.validate(this.data, (errors, fields) => {// 如果验证成功,errors 是一个 null// 如果验证失败,errors 是一个数组,数组每一项是错误信息// fields 是需要验证的属性,属性值是一个数组,数组中也包含着错误信息if (error) {console.log('验证失败')console.log(errors)console.log(fields)} else {console.log('验证成功')}})}
})
6.新增收货地址表单验证
  1. 收货人不能为空,且不能输入特殊字符
  2. 手机号不能为空, 且输入的手机号必须合法
  3. 省市区不能为空
  4. 详细地址不能为空
// 保存收货地址async saveAddrssForm(event) {// 组织参数(完整地址,是否设置为默认值)const { provinceName, cityName, districtName, address, isDefault } = this.data//最终要发送的请求参数const params = {...this.data,fullAddress: provinceName + cityName + districtName + address,isDefault: isDefault ? 1 : 0}const { valid } = await this.validatorAddress(params)if (!valid) returnconsole.log(params)},validatorAddress(params) {// 验证收货人,是否只包含大小写字母、数字和中文字符const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'// 验证手机号,是否符合中国大陆手机号码的格式const phoneReg = '^(?3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'// 创建验证规则const rules = {name: [{ required: true, message: '请输入收货人姓名' },{ pattern: nameRegExp, message: '收货人姓名不合法' }],phone: [{ required: true, message: '请输入收货人手机号' },{ pattern: phoneReg, message: '收货人手机号不合法' }],provinceName: { required: true, message: '请选择收货人所在地区' },address: { required: true, message: '请输入详细地址' }}// 传入验证规则进行实例化const validator = new Schema(rules)// 调用实例方法对请求参数进行验证// 注意:我们希望将验证结果通过 Promise 的形式返回给函数的调用者return new Promise((resolve) => {validator.validate(params, (errors) => {if (errors) {// 如果验证失败,需要给用户进行提示wx.toast({ title: errors[0].message })// 如果属性值是 false,说明验证失败resolve({ valid: false })} else {// 如果属性值是 true,说明验证成功resolve({ valid: true })}})})},
7.新增收货地址功能

只用调用一个接口就行
导入接口API函数
import { reqAddAddress } from ‘…/…/…/…/…/api/address’

    const { valid } = await this.validatorAddress(params)if (!valid) returnconst res = await reqAddAddress(params)if (res.code === 200) {wx.navigateBack()wx.toast({ title: '新增成功' })}
8. 收货地址列表渲染
import { reqAddressList } from '../../../../../api/address'
Page({// 页面的初始数据data: {addressList: []},// 去编辑页面toEdit() {wx.navigateTo({url: '/modules/settingModule/modules/settingModule/pages/address/add/index'})},async getAddressList() {const { data: addressList } = await reqAddressList()this.setData({ addressList })},onShow() {this.getAddressList()}
})
9.更新收货地址功能
// 处理更新async showAddressInfo(id) {if (!id) return// 将id挂载到当前页面实例上this.addressId = idwx.setNavigationBarTitle({title: '更新收货地址'})const res = await reqAddressInfo(id)this.setData(data)},onLoad(options) {this.qqmapwx = new QQMapWX({key: 'JA5BZ-ZYYWT-BHYXZ-LXUVP-JZ3D2-7RFD4'})// 实现更新this.showAddressInfo(options.id)}
10.删除收货地址

询问用户是否确认删除wx.modal
如果确认删除,调用API
同时给用户提示,并重新获取收货地址列表 this.getAddressList()

  // 删除收货地址delAddress (event) {// 结构传递的idconst { id } = event.currentTarget.dataset// 询问用户是否确认删除const modalRes = await wx.modal({content: '您确认删除该收货地址吗?'})// 如果确认删除,调用API// 同时给用户提示,并重新获取收货地址列表if(modalRes) {await reqDelAddress(id)wx.toast({ title: '删除成功' })this.getAddressList()}},
http://www.dtcms.com/a/284610.html

相关文章:

  • 针对教育行业的网络安全方案有哪些
  • 手机兼容测试服务提供商对比分析:如何选择最合适的测试平台
  • 输尿管下段积水预测与手术决策支持技术方案
  • 订货系统多角色支持核心实战指南
  • LLMFactory导出的Merge模型导入ollama
  • 从平面到时空:地图故事的时空叙事与沉浸式阅读
  • 征程 6 UCP 任务优先级 抢占简介与实操
  • Qt5 与 Qt6 详细对比
  • .NET 8.0 使用 WebSocket
  • 24、鸿蒙Harmony Next开发:不依赖UI组件的全局自定义弹出框 (openCustomDialog)
  • 趋势分析:从数据波动中读懂产品的 “健康信号”
  • 使用 docker 安装 openldap
  • JMeter在Linux命令行模式下执行的核心参数及使用场景,结合官方文档与实战经验整理,便于快速查阅
  • 【软件开发】Copilot 编码插件
  • demComponent
  • Java常用命令汇总
  • 中兴B860AV5.1-M2_S905L3SB最新完美版线刷包 解决指示灯异常问题
  • 微服务网站开发学习路线与RuoYi-Cloud实战指南
  • Spring Boot 监控:AOP vs Filter vs Java Agent
  • BI 数据可视化平台建设(3)—首页性能提升实践
  • ThinkPHP8 Windows开发全流程:从搭建到上线
  • 【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
  • MTK平台--如何查询手机连接的TX速率和带宽
  • Android本地浏览PDF(Android PDF.js 简要学习手册)
  • [MRCTF2020]PYWebsite
  • 大语言模型任务分解与汇总:从认知瓶颈到系统化解决方案
  • ubuntu基础搭建
  • 学习笔记(39):结合生活案例,介绍 10 种常见模型
  • Matplotlib 轴标题与刻度字号调整方法
  • 渗透总结一