千家信息网

小程序前置授权组件如何开发

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天小编给大家分享一下小程序前置授权组件如何开发的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了
千家信息网最后更新 2025年11月07日小程序前置授权组件如何开发

今天小编给大家分享一下小程序前置授权组件如何开发的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

思路

因为授权基本信息 / 手机号 必须使用小程序原生的的button,然后指定 open-type 后通过回调才能拿到相关信息( wx.getUserInfo() 已经不能弹窗啦,必须通过button弹窗),但是需要前置授权的点击区域样式又不一定是button的样式,所以决定使用一个透明的原生button 覆盖在点击区域之上,在视觉上实现无差别授权。通过是否授权字段来决定该按钮是否显示。

因为小程序中可能有多个需要相同授权的点击区域,所以决定用观察者模式来实现,即其中一个组件授权后,更新所有相同授权的组件,隐藏授权button。

样式

因为需要让授权button完全覆盖在点击区域之上,所以需要让slot里面的内容撑开父级定位元素,然后授权button绝对定位在该父元素内,宽高都设为100%即可。也可以通过小程序组件的 externalClasses 从组件外部指定样式。代码如下:

.wrapper {    position: relative;    width: 100%;    height: 100%;    .auth {      position: absolute;      width: 100%;      height: 100%;      opacity: 0;      top: 0;      left: 0;      z-index: 10;    }  }复制代码
      复制代码

逻辑

  • properties

    • openType 通过设置不同的参数来设置组件的授权类型

  • data

    • authorized 通过该值控制 授权按钮是否显示

  • attached

    • 在组件的 attached 阶段,判断用户是否授权,如果授权,直接将 authorized 置为 false

    • 如果用户没有授权,则初始化监听器

  • detached

    • 移除监听器

需要在组件外部绑定点击区域本身的点击事件,在已经授权的情况下会触发点击回调。

    xxxxxxx    复制代码

详细代码:

import event from '../../utils/event'  Component({    externalClasses: ['m-class'],    properties: {      openType: {        type: String,        value: 'getUserInfo'      }    },    data: {      authorized: false    },    methods: {      getPhoneNumber ({detail}) {        const vm = this        if (detail.errMsg === 'getPhoneNumber:ok') {          /*          * 获取到用户手机号后的业务代码          * */          vm._triggerEvent(detail)        }      },      getUserInfo ({detail: {userInfo: {avatarUrl, nickName}, errMsg}}) {        const vm = this        if (errMsg === 'getUserInfo:ok') {          /*          * 获取到用户信息后的业务代码          * */          vm._triggerEvent()        }      },      _triggerEvent (arg) {        const vm = this        /*        * 触发监听器后,再触发点击区域本身的点击回调        * */        event.triggerEvent([vm.data.config.eventName], true)        vm.triggerEvent('action', arg)      },      handleTap () {        const vm = this        vm.triggerEvent('action')      }    },    attached () {      const vm = this      let config      switch (vm.data.openType) {        case 'getUserInfo':          config = {            eventName: 'userInfo'          }          break        case 'getPhoneNumber':          config = {            eventName: 'phoneNumber'          }          break      }      if (getApp().globalData[config.eventName]) {        vm.setData({          authorized: true        })      } else {        event.addEventListener([config.eventName], vm, (authorized) => {          if (authorized) {            vm.setData({              authorized: true            })          }        })      }      vm.setData({        config      })    },    detached () {      const vm = this      event.removeEventListener([vm.data.config.eventName], vm)    }  })复制代码

其他

  • 可以根据业务需要扩充 open-type 的相关逻辑,案例中只有 userInfo 和phoneNumber。

  • 不能在slot上直接绑定tap事件,在基础库版本为1.9.7及以下版本无法响应事件,所以在外部再包一层view

以上就是"小程序前置授权组件如何开发"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

组件 代码 区域 程序 样式 用户 知识 篇文章 业务 事件 信息 内容 监听器 逻辑 监听 开发 不同 相同 元素 手机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 显示数据库中表列表语句 珠海来来往往网络技术公司 软件开发需要四六级吗 中国移动第五代网络技术 长城超云服务器管理口地址 7日杀 服务器管理工具 杀毒软件怎么添加服务器地址 北京小程序软件开发公司 单片机程序 软件开发 主要的数据库访问技术有哪些 软件开发前景怎么样啊 h3c服务器管理口默认地址 数据库应用技术高佳琴源代码 公司文件服务器管理办法 数据库和服务器有联系吗 软件开发如何保证项目质量 数据库管理技术是在的基础 局网络安全事故整改措施 网络安全防暴宣传 系统集成项目什么情况选择服务器 分布式数据库半连接优点 sql数据库修复数据语句 虚拟机服务器管理 计算机网络技术学习决策 软件开发工作好不好找 陕西音乐教学软件开发 江苏软件开发团队 成华区永鹏计算机软件开发工作室 安全阁网络技术论坛 深圳网络技术公司经营范围
0