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

前言

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

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

脑图预览

本章目标

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

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

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

启程,嗷呜~

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

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

一、获取用户信息

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

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

简单说一下:

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

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

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

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

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

放个趣图:


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("获取用户信息成功")// 拿到用户登录信息,更新 userInfothis.setData({// 如何确定数据被更新?调试器中 AppDatauserInfo: data.userInfo})},fail: () => {console.log("fail ==> 获取用户信息失败")}})},…
})

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

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

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

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

 onLoad: function() {console.log("---> Run index onLoad")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.userInfothis.setData({userInfo: res.userInfo,hasUserInfo: true})}})}},

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

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

这里需要注明一点:

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

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

简单总结下当前需求:

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

下面附上实际代码:

  <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)。

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

使用很 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 我们当然不可能一条条写,我们通过告诉编辑器一个规范,然后让其帮我们实现绘制渲染。

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


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

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>

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

  • 列表渲染 wx:for:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/list.html
  • 非冒泡事件 catchtap

很 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.jslet 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,})},/*** 生命周期函数--监听页面加载*/onLoad: 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",...}
}

演示效果如下:

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

    演示效果如下:

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

个人公众号

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

参考资料

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

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

  1. 微信小程序制作——获取用户信息

    微信小程序制作--获取用户信息 1.获取用户信息 方式一 wxml <view bindtap="getUserName">获取当前用户名</view> j ...

  2. 微信小程序授权获取用户信息和手机号码

    微信小程序授权获取用户信息和手机号码 1.微信官方文档 登录:https://developers.weixin.qq.com/miniprogram/dev/framework/open-abili ...

  3. 微信小程序授权 获取用户信息

    微信小程序授权 获取用户信息 小程序昵称突然变成了"微信用户",头像也不显示, <!-- 近期很多小伙伴通过该方法获取头像和昵称,代码也没有做改变,突然就变成了下面这样子 - ...

  4. 【微信小程序】获取用户信息

    文章目录 获取用户信息 组件open-data button组件中的open-type 接口getUserProfile 查看授权结果 获取用户信息 组件open-data 组件 open-data用 ...

  5. 微信小程序如何获取用户信息

    自我介绍 我是IT果果日记,微信公众号请搜索 IT果果日记 一个普通的技术宅,定期分享技术文章,欢迎点赞.关注和转发,请多关照. 微信小程序用户基本信息有哪些? 除了基本信息,微信还会提供openId ...

  6. Java-(二)微信小程序授权获取用户信息和手机号码

    第一篇我们已经知道了微信小程序怎么授权登录获取用户信息. openId 和 unionId .下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码. 微信官方文档:https://develo ...

  7. 微信小程序后端获取用户信息

    @塞纳河 微信小程序通过解密encrytedData(iv.sessionKey),获取用户信息 appid: 应用唯一标识 secret:应用密钥 code:wx.login()获取 encrypt ...

  8. 微信小程序开发----获取用户信息

    今天介绍两种微信小程序获取用户信息的方法 第一中直接授权获取(在同一页面之中): 首先在微信程序一个页面的WXML文件写入获取用户信息的按钮 <!-- bindTap用于绑定事件 --> ...

  9. 微信小程序之获取用户信息(流程+2种方法)

    获取流程图 ui库Vant Weapp:Vant Weapp地址(点击跳转) 第一种方法 适用于直接点击登录获取 在界面添加登录按钮,用户点击按钮调用wx.getUserProfile()函数来提示用 ...

最新文章

  1. 超长JVM总结,面试必备
  2. 记一次网络问题的排查
  3. **Apache Options指令详解
  4. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...
  5. NumPy学习笔记(一)
  6. lg gram 笔记本 linux,lg gram 15笔记本使用雨林木风u盘安装win7系统教程?
  7. 架构成长之路:常见的五种MySQL高可用方案分析
  8. hadoop3.0.0 源码阅读之一:IPC Client部分
  9. 中小企业信息化,“轻”和“快”是方向
  10. docker 部署java_使用Java EE 7,WildFly和Docker进行持续部署–(第1部分)
  11. Java LinkedList addFirst()方法与示例
  12. 极大似然估计的渐进正态性
  13. kafka sink mysql,kafka之七 sinkTask详解
  14. [Tjoi2016Heoi2016]排序[01序列]
  15. instr和substr函数
  16. Linux——虚拟机系统安装
  17. 开源字体lato fonts
  18. cad插件_CAD插件自动编号安装教程
  19. 魅族插了卡显示无服务器,魅族手机SD卡无法读取怎么办解决方案
  20. 多摩川绝对值编码器CPLD FPGA通信源码(VHDL格式+协议+说明书)

热门文章

  1. 计算机实验楼应用需求分析,校园网络信息化需求分析报告
  2. 计算机学院迎新晚会目的,某学院计算机系迎新晚会策划书.doc
  3. poj 1789 kruscal水题
  4. CentOS编译安装Qt(Qt可使用静态编译编译器)
  5. OpenCV常用函数记载
  6. 恐怕你不确定自己喜欢做什么
  7. DevExpress VCL for Delphi 各版本收集下载(最新支持Delphi 10.3.3 RIO)
  8. BrandHouse在蓝筹中国基金领投的首轮融资中筹得400万欧元
  9. 那周余嘉熊掌将得队——用户使用调查报告
  10. 芋道admin-ui启动失败提示npm install --save highlight.js/lib/highlight highlight.js/styles/github-gist.css