千家信息网

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

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

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

思路

因为授权基本信息 / 手机号 必须使用小程序原生的的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安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 江苏根荣互联网科技 新华互联网科技学院 与互联网科技公司 互联网科技公司电话 北京互联网络科技有限公司 互联网高科技股票 上海电发互联网科技有限公司 互联网科技公司需要的职位 现代科技和互联网有关系吗 福州新华互联网科技学校 知乎 佳云科技和互联网广告 成都互联网科技公司工作好不好 河南住房之家互联网科技 济南有互联网科技公司吗 山东有哪些互联网科技公司 中天科技中国工业互联网 陕西九四连强互联网科技有限公司 科技和互联网行业的特点 互联网科技快速发展优美句子 手冲咖啡和咖啡机区别 科技互联网技术 互联网科技英文 极限挑战互联网科技 互联网养老 桔豆科技 温州喔噻互联网科技有限公司 互联网科技有哪些公司 成都互联网科技公司工作好不好 恒生互联网科技指数跳水 互联网科技和法律行业
0