首页 > 编程语言 >玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)

时间:2022-11-10 22:32:45浏览次数:68  
标签:function index 14 04 用户 点击 userInfo data 玩转


LZ-Says:总是要各种颠沛流离,才能换得片刻安宁。努力让自己变得更好,加油~



玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序


前言

前几天,完成了微信小程序的首章,学习起来,还是多多少少有点坑,不舒服。

今天我们继续开启微信小程序 Study 之路~

脑图预览

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_获取用户信息_02

本章目标

跟我走完本章,你会 get 如下技能:

  • 获取用户信息;
  • Swiper 组件使用;
  • 模版定义以及使用;
  • 如何加载显示一个列表以及如何处理列表点击;
  • 简单了解全局配置以及单独配置.

上文说过,本次将分批发布,第一批文章,主要就是微信小程序简单了解,顺便练习几个页面效果,而第二批,则主要记录 LZ 从零开始,开发一个 wanAndroid 小程序。

启程,嗷呜~

微信小程序微信官网一直在优化、更新中,小伙伴可以查看官网获取第一手资料,以官方为主~

随后,我们一起来看一下今天我们要实现的效果演示图:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序_03

一、获取用户信息

官方地址:
​​​https://developers.weixin.qq.com/miniprogram/dev/api/wx.getUserInfo.html​​​​https://developers.weixin.qq.com/miniprogram/dev/component/button.html​

首先,我们先来简单搭建一个页面效果:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序_04


简单说一下:

启动时,默认显示“点击获取用户信息”,点击按钮后,弹出授权框,点击允许显示当前已授权用户的头像以及昵称。

<!--index.wxml-->
<view class="container">
<image src='图片地址'></image>
<text>名称</text>
<button>点击获取用户信息</button>
</view>

随后我们查看官方,看下如果想要获取用户信息,我们应该如何操作?

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序_05


这里顺带提个好玩的事儿,地址如下,有兴趣的小伙伴可以看下:

​https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01​

放个趣图:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_获取用户信息_06


getUserInfo 这个接口,微信改过一次版,曾经可以通过此提示用户进行授权,而如今,却只能通过 Button 点击事件获取用户信息。

好啦,具体细节大家自行查看官网,这里附上获取用户信息步骤如下:

  • Step 1: Button 设置 open-type,并且监听用户点击请求授权框按钮 bindgetuserinfo;
  • Step 2: 通过 wx.getSetting 判断用户是否授权;
  • Step 3: 通过 wx.getUserInfo 获取用户信息,并绑定 userInfo;
  • Step 4: 通过 bindgetuserinfo 回调监听用户是否允许授权;
  • Step 5: 根据授权状态动态显示授权按钮或者用户信息。

以上五步便是 LZ 操作过程,下面附上实际代码:

首先来看我们的页面:

<!--index.wxml-->
<view class="container">
<image src='{{ userInfo.avatarUrl }}'></image>
<text>{{ userInfo.nickName }}</text>
<button bindgetuserinfo='handleGetUserInfo' bindtap='getUserInfo' open-type='getUserInfo' style='display:{{ isShow ? "block" : "none" }}'>点击获取用户信息</button>
</view>

以下附上关键点以及描述:

  • open-type : 微信开放能力,例如我们现在的获取用户信息;
  • open-type=‘getUserInfo’ : 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息;
  • bindgetuserinfo: 获取用户是否允许授权。
  • userInfo: 是我们在 js 中定义用于接收获取到的用户信息,页面中展示语法 {{ userInfo.属性即可 }}

随后,我们查看 js 代码:

//index.js
//获取应用实例
const app = getApp()

Page({
data: {
userInfo: {},
isShow: true
},
handleGetUserInfo: function(data) {
// 判断用户是否点击允许
if (data.detail.rawData) {
// 判断用户是否点击允许
this.getWxUserInfo();
} else {
console.log("用户点击拒绝,MMP")
}
},
getUserInfo: function() {
this.getWxUserInfo();
},
/**
* 获取用户信息
*/
getWxUserInfo() {
// 判断用户是否授权
wx.getSetting({
success: (data) => {
console.log(data);
if (data.authSetting['scope.userInfo']) {
// 用户已授权
this.setData({
isShow: false
})
} else {
// 用户未授权
this.setData({
isShow: true
})
}
}
})

// 获取用户登录信息
wx.getUserInfo({
success: (data) => { // 此处注意 回调中的 this 和 当前页面 this 不一样 解决方案,1:使用 ES 6 语法,也就是现在写法 : => 2:定义 that(let that = this 然后 that.data)
console.log("获取用户信息成功")
// 拿到用户登录信息,更新 userInfo
this.setData({
// 如何确定数据被更新?调试器中 AppData
userInfo: data.userInfo
})
},
fail: () => {
console.log("fail ==> 获取用户信息失败")
}
})
},

})

而最后则是简单的样式文件,也一并附上:

.content{
display: flex;
flex-direction: column;
}

这里面重点则是关于授权,如何请求授权、如何检测授权,其他的,则主要看各位实际需求了。

然后看一下微信官方为我们提供的演示代码:

onLoad: function() {
console.log("---> Run index onl oad")
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => { // ES 6 解决 this 不同
// 全局赋值
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
},

二、Swiper(滑块视图容器/轮播图) 组件使用

官方地址:
​​​https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html​

这里需要注明一点:

Swiper 其中只可放置 swiper-item 组件。

我们首先来看一下实现效果:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_xml_07


简单总结下当前需求:

  • 图片自动轮播并有指示器;
  • 点击图片可以知道当前点击索引位置。

下面附上实际代码:

<swiper catchtap='swiperClick' autoplay indicator-dots indicator-color='white' indicator-active-color='black'>
<swiper-item>
<image data-index='0' src='http://p1.pstatp.com/large/pgc-image/15225120577560c70c6c433'></image>
</swiper-item>
<swiper-item>
<image data-index='1' src='https://p1.ssl.cdn.btime.com/t0145750c00212591a0.jpg?size=640x360'></image>
</swiper-item>
<swiper-item>
<image data-index='2' src='http://5b0988e595225.cdn.sohucs.com/images/20180528/03d57625517546b38eb27ed3adfe0155.jpeg'></image>
</swiper-item>
</swiper>

对应的 js 文件代码如下:

swiperClick: function (event) {
let index = event.target.dataset.index;
console.log("当前点击 index :" + index);
},

注意在实现获取当前点击索引,是直接给 image 设置了 data-= ,这里当然可以根据实际项目需求变更 item。

三、模版使用

官方地址:​​https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/template.html​

模版,可以理解为我们 Android 中 Adapter 所需要的 item,当然,模版也可以理解为曾经我们在 Android 中 include 等。

那么,下面我们一起来实现微信小程序的模版。

Step 1: 在 Pages 下创建 template 目录

为了省事儿,你可以直接创建 page,但是需要将目录地址在 app.json 中移除。因为我们只是一个模版啊,而一个模版,肯定会包含基本的页面(wxml)、基本样式(wxss)以及可能会有 js 和基本配置(json)。

先来看一个最终完成的演示效果:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序_08


使用很 Easy,记住如下俩个要点:

  • 使用 name 属性,作为模板的名字。然后在 <template/ > 内定义代码片段;
  • 使用 is 属性,声明需要的使用的模板,然后将模板所需要的 data 传入。

好记性不如烂笔头,下面我们一起来实践一波:

首先定义我们的模版内容,如上图,只是一个带有圆角背景框,这里附上关键代码:

<template name='listTmp'> <!-- 此处一定要指定 name 属性 -->
<view class='itemList'>
...
</view>
</template>

首先我们要明白,模版也是有脾气有性格有样式的,要使用,也需要将其样式文件引入对应的样式文件中:

/* 倒入模版样式文件 */
@import '/pages/template/list-template.wxss';

调用如下:

<!-- 引入对应的模版文件 -->
<import src="/pages/template/list-template.wxml" />
<!-- 使用模版 通过 is = “模版名称” -->
<template is="listTmp"></template>

So,一个很 Easy 的模版创建以及使用完成咯~

下面一起玩个稍稍牛逼点的吧~

四、列表展示

试想,在咨询类型的 App 中,总是会有很多条 item,那么这些 item 我们当然不可能一条条写,我们通过告诉编辑器一个规范,然后让其帮我们实现绘制渲染。

我们首先查看一下要实现的列表的一个效果:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_微信小程序_09


首先,我们先来简单模拟一段网络返回的数据,以便于我们下面的演示:

let list_data = [
{
image: 'http://p1.pstatp.com/large/pgc-image/15225120577560c70c6c433',
content: '啦啦啦-0'
},
{
image: 'http://p1.pstatp.com/large/pgc-image/15225120577560c70c6c433',
content: '啦啦啦-1'
},
{
image: 'http://p1.pstatp.com/large/pgc-image/15225120577560c70c6c433',
content: '啦啦啦-2'
}
];

module.exports = {list_data};

还记得我们在模版中说过的第二点要求么?我们来个回放:

  • 使用 is 属性,声明需要的使用的模板,然后将模板所需要的 data 传入。

So,我们开始搞我们的模版:

<template name='listTmp'>
<view class='itemList'>
<image src='{{ image }}'></image>
<text>{{ content }}</text>
</view>
</template>

而下面,则是我们页面的一个遍历,这里主要用到了:

很 easy,直接附上代码:

<!-- 引入对应的模版文件 -->
<import src="/pages/template/list-template.wxml" />
<!-- 注意:wx:key 提高列表渲染时的效率 -->
<view catchtap='itemListClick' data-index='{{ index }}' wx:for='{{ infoList }}' wx:key='{{ index }}'>
<template is='listTmp' data='{{ ...item }}'/>
</view>

随后,来到我们重要的 js 逻辑层。

// pages/list/list.js

let listArr = require('../../datas/list-data.js');

Page({

/**
* 页面的初始数据
*/
data: {
infoList: []
},

swiperClick: function(event) {
let index = event.target.dataset.index;
console.log("当前点击 index :" + index);
},
/**
* item 点击事件
*/
itemListClick: function(event) {
let index = event.currentTarget.dataset.index;
wx.navigateTo({
url: '/pages/detail/details?index=' + index,
})
},
/**
* 生命周期函数--监听页面加载
*/
onl oad: function(options) {
this.setData({
infoList: listArr.list_data
})
},

/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {

},

/**
* 生命周期函数--监听页面显示
*/
onShow: function() {

},

/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {

},

/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {

},

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {

},

/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {

},

/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {

}
})

Command + S 运行一波~

五、全局配置以及单独配置

关于这个,也是 LZ 突然发现的,感觉挺好玩、挺有用,简单说下:

在我们平时开发原生 App 时,一般来讲都会有一个统一的上方顶部 Title 统一背景色,当然在个别的页面中会有其独特的颜色区分,那么针对以上情况我们又如何实现呢?

  • 设置全局状态栏背景色:
    app.json:
{
"pages": [
...
],
"window": {
"navigationBarBackgroundColor": "#eee",
...
}
}

演示效果如下:

玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_获取用户信息_10

  • 局部某个页需要单独显示对应颜色(直接在对应的 json 文件下拷贝即可)

    演示效果如下:

哦可,点滴积累,希望我们变得越来越好~

个人公众号

不定期发布博文,最近有点忙,感谢老铁理解,欢迎关注~


玩转微信小程序 之 获取用户信息以及玩转基本列表渲染(2019/04/14)_xml_11


参考资料

  1. 微信小程序:​​https://mp.weixin.qq.com/cgi-bin/wx​


标签:function,index,14,04,用户,点击,userInfo,data,玩转
From: https://blog.51cto.com/u_13346181/5842274

相关文章

  • AtCoder Regular Contest 149 D Simultaneous Sugoroku
    很妙的一个题。没法用数据结构直接维护点的移动。可以挖掘一些性质。发现对于两个点\(x\)和\(-x\),它们的移动关于原点对称。可以根据对称性维护森林。维护当前的区间......
  • 第六章14
    【题目描述】在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是......
  • 14.严格模式
    严格模式JS运行代码的模式有两种:正常模式默认情况下代码都运行在正常模式下在正常模式,语法检查并不严格它的原则是,能不报错的地方尽量不报错这种处理方式导致代码......
  • ABC214G
    思路参考AK_Dream大佬考虑容斥,计算钦定\(k\)位满足\(r_i=p_i\)或\(r_i=q_i\)的方案数。建出\(n\)个点,将每对\(p_i,q_i\)连边,由于每个点度数都是\(2\),所以会......
  • 关于file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /m
    安装smaba套件的时候看某视频里的centos的安装命令为yum-yinstallsmaba 结果自己在Redhat打的命令就报错,其实我自己Redhat7.4正确的命令是yuminstall-ysmaba(可能R......
  • 【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 8254
    前言既然你已经知道TRex并尝试搜索它的安装教程,这意味着你有一定的基础知识(至少知道自己需要什么)。因此本文对于TRex的介绍部分会偏少本次主要为TRex安装过程的一次记录(......
  • JavaWeb-04-Http
    4.http4.1http是什么超文本传输协议(HyperTextTransferProtocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以......
  • [AGC040F] Two Pieces 题解
    linkSolution这个题真的挺难的。/kk看了一个下午的题解才搞懂。/fn我们发现我们如果设状态\((x,d)\)表示前面的一个点在\(x\),另一个在\(x-d\),那么三种操作相当于:......
  • 设计一个接口至少要考虑这14点!
    入参合法性校验接口的版本控制接口考虑幂等性接口考虑防止重复请求提高接口的响应时间接口限流控制黑白IP白名单敏感数据脱敏请求接口的先决条件-token记录接口......
  • vue 项目使用 charles 代理线上页面到本地后显示404
    背景某app嵌入了航管的H5页面,在测试过程中,发现其中一个页面白屏。最简单的方案就是代理到本机,看看到底是哪里的bug。线上链接:https://wtest.133.cn/hangban/vue/jipiao/h......