显示用户基本信息

在微信小程序中,经常会碰到需要展示微信用户的基本信息,如果只是为了显示用户信息,最简单有效的办法是使用open-data,这是微信小程序内置的用于展示微信开放数据的组件,通过改变type来控制显示的信息,可以直接在wxml中使用,不需要其他的授权等操作。

<view class="avatar-container avatar-position">
<open-data type="userAvatarUrl" class="avatar"></open-data>
<open-data type="userNickName"></open-data>
<open-data type="userGender"></open-data>
<open-data type="userCountry"></open-data>
<open-data type="userProvince"></open-data>
<open-data type="userCity"></open-data>
</view>

用户授权

在上面的例子中,使用open-data可以快速便捷的显示用户信息,但是这些基本信息只能用户显示,并不能直接在js中获取,也不能传递到后台,在涉及到需要保存用户信息的需求时,上面的方法就不在适用了。

在老版本的小程序中,可以使用wx.getUserInfo来进行用户授权,但是在新版本的微信小程序中,必须使用button点击触发用户授权

user.wxml

   <button open-type="getUserInfo" bind:getuserinfo="onGetUserInfo" class="avatar-position" ></button>

user.js

onGetUserInfo: function (event) {
let userInfo = event.detail.userInfo
if (userInfo) {
this.setData({
hasUserInfo: true,
userInfo: userInfo
})
console.log(userInfo);
}
},

当点击上面的按钮后,就会出现授权的弹窗

点击允许,就能获取到用户的基本信息了

但是并不是任何时候点击授权按钮都能出现授权弹窗:只有当用户未进行授权时,点击授权按钮回出现授权弹窗;当用户已经授权了,再次点击时,不再出现授权弹窗。所以,在获取用户信息前,需要先判断用户是否进行了授权:如果进行了授权,那么就可以直接使用wx.getUserInfo来获取基本信息了;如果没有授权,则显示授权按钮。

结合上面的例子,我们可以这样做,首先判断用户是否进行了授权,用hasUserInfo来标志:如果已经进行了授权,那么久可以直接使用wx.getUserInfo来获取用户信息,拿到了用户信息以后,页面展示就可以直接使用open-data了;如果没有进行授权,则显示授权按钮,并为该按钮绑定事件,引导用户主动授权:

user.wxml

<view class="container">
<image src="/images/my/my@bg.png" class="bg"></image>
<img-btn-cmp wx:if="{{!hasUserInfo}}" open-type="getUserInfo" class="avatar-position" bind:getuserinfo="onGetUserInfo">
<image slot="img" class="avatar" src="/images/my/my.png" />
</img-btn-cmp>
<view class="avatar-container avatar-position">
<image src="{{userInfo.avatarUrl}}" wx:if="{{hasUserInfo}}" class="avatar" />
<open-data wx:if="{{hasUserInfo}}" type="userNickName"></open-data>
</view>
</view>

user.js

Page({
data: {
hasUserInfo: true,
userInfo: null,
}, onReady: function () {
wx.getSetting({
success: (data) => {
if (data.authSetting['scope.userInfo']) {
wx.getUserInfo({
success: (data) => {
this.setData({
hasUserInfo: true,
userInfo: data.userInfo
})
}
})
} else {
this.setData({
hasUserInfo: false
})
}
}
})
},
onGetUserInfo: function (event) {
let userInfo = event.detail.userInfo
if (userInfo) {
this.setData({
hasUserInfo: true,
userInfo: userInfo
})
}
},
})

没有授权之前

点击后进行授权

授权成功后,不再显示授权按钮,而是直接显示用户信息

自定义分享按钮

在微信小程序中实现分享,同样需要使用button触发,不同的是button的类型不同

<button open-type='share'>点我分享</button>

模拟器上是这种效果

在真机上则会直接进入聊天列表

小程序之间的跳转

如果要从小程序A中跳转到小程序B中,那么小程序A和B必须同时关联同一个公众号(服务号或订阅号),满足了这个前提条件以后,才能进行后续操作。

要从小程序A中跳转到小程序B中,还需要有小程序B的app-id,然后在小程序A中使用navigator组件进行跳转

aaa.wxml

<navigator class="nav" target="miniProgram" app-id="wxXXXXXXXXXXXXXX9" open-type="navigate">
<image class="vendor" src="/images/my/vendor.png"></image>
</navigator>

然后在真机上点击图中的按钮就可以实现 小程序之间的跳转了。

微信小程序相关操作的更多相关文章

  1. 微信小程序相关资料整理

    微信小程序官方介绍https://mp.weixin.qq.com/debug/wxadoc/introduction/index.html?t=201818 微信小程序开发资源https://jue ...

  2. 微信小程序--相关资料

    微信小程序Demo https://github.com/zce/weapp­-demojustjavac/awesome­wechat­weapp: 微信小程序开发资源汇总 https://gith ...

  3. 微信小程序相关三、css写小黄人

    小程序上课第三天,因为今天院里有活动,所以没去上课,第四天上午又因为要召开入党转正大会,又耽误了一上午,下午去上课,要了资料.这两天讲了一些零零碎碎的东西,做的实例有上面这个小黄人 都是用的css,基 ...

  4. 微信小程序相关一、模仿京东静态登录页面

    一.培训的第一天,基本上没有什么最新的东西,但是看到老师的代码收获的确实是不少. 1.1.首页代码很简洁,将共有的样式都提取的很好. 1.2.其次是每一个小块写样式的时候用到了好多子代选择器和后代选择 ...

  5. 微信小程序——动画操作时,rpx 和 px 的转换计算。

    嫌长版本: var rpx = 10000; var systemInfo = wx.getSystemInfoSync(); var px = rpx / 750 * systemInfo.wind ...

  6. 微信小程序不可操作dom节点

    //根据历史记录快速搜索 fastSearch:function(e){ console.log(e.currentTarget.id) wx.navigateTo({ url: '../search ...

  7. 微信小程序相关二、css介绍,菜单制作,表单相关,京东注册页面

    一.第二天上午 1.1上午因为有其他的课所以没有去这个课,不过下午看复习的时候的概括,讲了DTD,语法特性,css选择器以及权重,还有一些简单的样式 1.2 DTD Docuement Type 声明 ...

  8. 微信小程序相关

    https://www.cnblogs.com/shenzikun1314/p/7805168.html

  9. 微信小程序-数组操作

    Page({ data: { list:[{ id:, name:'芒果', count: },{ id:, name:'香蕉', count: }, }] } }) 向前插入数据 //要增加的数组 ...

随机推荐

  1. maven项目 @Resource报错 ava.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

    @Resource 出错 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup() maven项目中,使用@Resource报错. ...

  2. 阅读笔记06-架构师必备最全SQL优化方案(2)

    四.基础优化 1.优化思路? 定位问题点吮吸:硬件-->系统-->应用-->数据库-->架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未然 ...

  3. 移动端安全 - 安卓Android - 工具相关

    渗透工具 drozer .安装文件解压后文件介绍 setup.exe ---安装 agent.apk ---用于调试 - 安装在安卓手机上 使用命令 . cd 到 drozer 安装目录 . adb ...

  4. C#的一般处理程序中Cookie的写入、读取、清除

    1.写入Cookie值 string userName = context.Request.Form["u_Name"].ToString().Trim(); string pwd ...

  5. 继承Process类,计算累加和以及阶乘

    #定义一个类 继承Process类 from multiprocessing import Process import os class Download(Process): def __init_ ...

  6. docker 一小时快速入门之利用docker安装Redis

    利用docker方式快捷安装redis 该方式默认下载的最新版本镜像,如需要下载指定版本在redis后面跟:版本号 docker pull redis 查看当前下载redis的镜像 docker im ...

  7. Angular2+之模态框-使用ngx-bootstrap包中的模态框组件实现

    模态框是项目中经常会用到的一个公共功能,通常会被用左提示框或者扩展选项框. 下面,我用一个小例子来简单展示实现模态框功能的过程: 1.为项目加包: ng add ngx-bootstrap 2.在xx ...

  8. CVE-2014-4014 Linux Kernel Local Privilege Escalation PoC

    /**  * CVE-2014-4014 Linux Kernel Local Privilege Escalation PoC  *  * Vitaly Nikolenko  * http://ha ...

  9. python 列表总结大全

    1定义 names=[] names=[1,2,1,1,1,] names=[1.'10'.[1,1]] 2添加元素 names.append() names.insert(0,10) names.e ...

  10. React中异步模块api React.lazy和React.Suspense

    React.lazy React.lazy 这个函数需要动态调用 import().它必须返回一个 Promise,该 Promise 需要 resolve 一个 defalut export 的 R ...