本篇参考B站视频小程序实战项目-食疗坊_哔哩哔哩_bilibili

目录

方法一

方法二,本例以方法二展示

1.编写contact页面

2.展示效果

3.优化

编写app.js

编写 contact页面

展示效果:


方法一

(1)wxml

<!--pages/contact/contact.wxml-->
获取用户头像和昵称 -->
<!-- <view class="userInfo"><view class="img"><open-data class="logo" type="userAvatarUrl"></open-data></view><open-data type="userNickName"></open-data>
</view>

方法二:本例以方法二展示,通过全局变量globalData进行读取

1.编写contact页面

(1)wxml

<!--pages/contact/contact.wxml-->
<view class="userInfo"><button wx:if='{{isShow}}' open-type="getUserInfo" bindgetuserinfo="getUserInfo">获取头像和昵称</button><view wx:else><view class='img'><image class="logo" src="{{userInfo.avatarUrl}}" alt=""/></view><view>{{userInfo.nickName}}</view></view>
</view>

(2)js

// pages/contact/contact.js
Page({/*** 页面的初始数据*/data: {isShow: true,   // 显示按钮userInfo: '',   // 存储用户信息},// 1.点击按钮,授权头像和昵称getUserInfo(e) {console.log(e);this.setData({userInfo : e.detail.userInfo,isShow : false})},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

(3)wxss

/* pages/contact/contact.wxss */
page {background: #f5f5f5;
}.userInfo {padding: 10px;background: #fff;display: flex;align-items: center;
}
.img .logo {width: 180rpx;height: 180rpx;border-radius: 50%;overflow: hidden;border: 1px solid #ccc8c8;display: block;
}

2.展示效果

(1)编译之后,页面展示如下,

(2)点击“获取头像和昵称”按钮,页面展示如下,

问题:每次进入都需要用户进行点击“授权用户头像和昵称”按钮。

3.优化

用户点击:获取头像和昵称

  • 1.button触发按钮点击事件
  • 2.定义函数,获取e.detail获取头像的昵称
  • 3.刷新页面--再次进入还需要点击按钮。希望:之前授权了,直接获取头像和昵称
    • (1)本地存储:获取用户头像和昵称之后,把数据存储本地。

      • 缺点:数据固定了,不会更新
    • (2)重新获取:推荐。在app.js全局获取,页面共享数据
      • 获取用户之前是否以及授权过信息。如果之前已经授权过信息,那么直接获取头像和昵称;否则第一进入使,跳转到获取界面,引导用户授权。

编写app.js

注意:将用户信息存储到全局变量,当前页不能用。也就是说如果我直接进入当前contact页面(不先进入首页),那么当前页contact页面拿不到用户信息。因为请求数据是异步的,如果异步全局读不到,那么就需要在app.js里通过函数返回数据。

(1)打开app.js,进行编写,

// app.js
App({onLaunch() {// 展示本地存储能力const logs = wx.getStorageSync('logs') || []logs.unshift(Date.now())wx.setStorageSync('logs', logs)// 进入小程序,获取用户之前是否授权信息// 1.获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。wx.getSetting({success:res=>{console.log(res);// 判断reswx.authSetting是否包含userInfo = trueif (res.authSetting['scope.userInfo']){ // 授权了console.log("之前已经授权过用户信息,直接获取")// 获取小程序api,获取用户信息wx.getUserInfo({success:result=>{console.log('用户信息',result)// 获取用户信息之后,存储到全局变量globalData  this.globalData.userInfo = result.userInfo// 如果异步全局读不到,那么函数返回数据if(this.callback){this.callback(result.userInfo)}}})} else{// 没有授权--跳转到授权页面wx.showToast({title: '之前没有授权,请授权后查看小程序',})// wx.switchTab({//   url: 'pages/contact/contact',// })}}})},globalData:{userInfo:''   }
})

编写 contact页面

(2)首先在contact.js中添加这一行代码,之后进行编写,

// pages/contact/contact.js
const app = getApp();
Page({/*** 页面的初始数据*/data: {isShow: true,   // 显示按钮userInfo: '',   // 存储用户信息},// 1.点击按钮,授权头像和昵称getUserInfo(e) {console.log(e);this.setData({userInfo : e.detail.userInfo,isShow : false})},/*** 生命周期函数--监听页面加载*/onLoad(options) {// 获取app.js全局变量globalData的用户信息,如果有数据则渲染授权信息,没有不渲染if (app.globalData.userInfo){console.log('全局变量授权信息存在')this.setData({userInfo:app.globalData.userInfo,isShow:false})  }else{// 如果异步全局读不到,那么通过给app对象定义函数,接收数据app.callback=res=>{console.log(res)this.setData({userInfo:app.globalData.userInfo,isShow:false})  }}},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

(3)contact.wxss和contact.wxml不变

/* pages/contact/contact.wxss */
page {background: #f5f5f5;
}.userInfo {padding: 10px;background: #fff;display: flex;align-items: center;
}
.img .logo {width: 180rpx;height: 180rpx;border-radius: 50%;overflow: hidden;border: 1px solid #ccc8c8;display: block;
}
<!--pages/contact/contact.wxml-->
<!-- 用户点击:获取头像和昵称
1.button触发按钮点击事件
2.定义函数,获取e.detail获取头像的昵称
3.刷新页面--再次进入还需要点击按钮。希望:之前授权了,直接获取头像和昵称本地存储:获取用户头像和昵称之后,把数据存储本地缺点:数据固定了,不会更新重新获取:推荐-->
<view class="userInfo"><button wx:if='{{isShow}}' open-type="getUserInfo" bindgetuserinfo="getUserInfo">获取头像和昵称</button><view wx:else><view class='img'><image class="logo" src="{{userInfo.avatarUrl}}" alt=""/></view><view>{{userInfo.nickName}}</view></view>
</view>

展示效果:

(1)进行普通编译,默认先进入首页,可以看到console调试器上打印出了“之前已经授权过用户信息,直接获取”,

(2)再进入contact页面,可以看到“全局变量授权信息存在” ,

(3)清空缓存之后,再次进行普通编译,会发现调试器打印的授权信息中没有“userInfo:true”,而且contact页面显示的是“获取用户头像和昵称”按钮。

小程序获取用户头像和昵称相关推荐

  1. 微信小程序—获取用户头像、昵称

    博客概要 针对使用微信小程序时获取用户头像.昵称的三种方法,做一个简单分享~ 文章目录 博客概要 1.wx.getUserInfo接口 2.button触发 3.open-data标签 总结 1.wx ...

  2. 微信小程序获取用户头像和昵称(填写头像昵称能力)

    开放能力调整公告 总体来说就是通过按钮来授权获取用户基础信息的能力都没啦(wx.getUserProfile,wx.getUserInfo都不行了),都要使用新版本的 [头像昵称填写能力]啦. 小程序 ...

  3. 微信小程序获取用户头像和昵称(头像昵称填写能力)

    开放能力调整公告 总体来说就是通过按钮来授权获取用户基础信息的能力都没啦(wx.getUserProfile,wx.getUserInfo都不行了),都要使用新版本的 [头像昵称填写能力]啦. 小程序 ...

  4. [小程序] 获取用户头像以及昵称

    头像选择 需要将 button 组件 open-type 的值设置为 chooseAvatar,当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调获取到头像信息的临时路 ...

  5. 微信小程序获取用户头像和昵称

    由于微信回收了open-data,头像返回了默认头像,昵称返回了微信用户,大家都骂骂咧咧的把getUserInfo改成了getUserProfile,getUserProfile这个api需要tap才 ...

  6. 微信小程序获取个人头像和昵称,和地图选点功能

    微信小程序获取个人头像和昵称,有技巧 1.可以直接获取 2.通过用户点击获取 过程中,有什么问题,可以加我微信号yizheng369探讨 先分析 这里面隐含了很多默认的规则,大家要注意: 1.可以直接 ...

  7. 微信小程序获取用户头像昵称

    微信小程序获取头像昵称问题解决 文章目录 微信小程序获取头像昵称问题解决 前言和传统方法 问题描述 解决方案 实现效果 前言和传统方法 微信小程序是一种基于微信开发平台的轻应用,用户可以通过微信扫码. ...

  8. 微信小程序获取用户头像昵称组件封装(最新版)

    一.前言 微信小程序将在2022年11月08日对获取用户头像昵称信息的API再一次进行改动,这次的改动比较大. 更多详情查看公告:公告直达链接 我的项目比较多,而且大部分都是只需要获取用户的头像以及昵 ...

  9. php实现微信小程序获取用户openid,昵称和头像方法

    最近做微信小程序,要做一个排行榜的功能,摸索了一天,终于找到获取用户openid,昵称和头像方法. 先上wxml: <button bindtap="getInfo"> ...

最新文章

  1. python 连接sqlite及操作
  2. PID算法-温度控制
  3. Python学习笔记:进程和线程(起)
  4. 【软件-软件设计师】操作系统知识架构图
  5. Nacos配置中心用法详细介绍
  6. 简单的css缩放动画,仿腾讯新闻的分享按钮和美团app底部的图标样式
  7. centos mysql php tomcat_CentOS yum安装Apache + PHP + Tomcat7 + MySQL
  8. LeetCode刷题(24)
  9. 一个经典约瑟夫问题的分析与解答
  10. cmd for语句的用法
  11. 亿级用户下的新浪微博平台架构
  12. java支付宝app支付代码
  13. 计算机开机主机不停地重启,电脑开机一直重启怎么办
  14. CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总
  15. 手机测试人员的思维过程
  16. 10个副业兼职创业,在家赚钱绝对真实
  17. spring schedule 配置多任务动态 cron 【增删启停】
  18. 运维之眼——流量采集网络
  19. JQuery-回到顶部
  20. 安卓如何使用layout布局的弹出框AlertDialog

热门文章

  1. Bugku CTF 矛盾 网站被黑
  2. C#使用OpenCv图像批处理——改变图片大小并且重命名
  3. 禁止乱用:一款牛批的开源去马赛克工具。。。
  4. Memory System - Cache、DRAM、Disk学习笔记
  5. echarts gallery新地址!!!
  6. df -h执行卡住不动问题解决
  7. Vue SEO的四种方案
  8. INPHIC英菲克_全志a31s芯片_android4.4.2_root_当贝桌面线刷固件包
  9. 彼得·德鲁克--管理思想摘录
  10. 相关性质和条件变量-ReentrantLock详解(2)-AQS-并发编程(Java)