草庐IT

小程序获取头像试试水 02《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》

1_bit 2023-04-08 原文

本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232

进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有详细的变现教程等你来。

前言

《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》
本系列文章参考《微信小程序开发实战》
教程出完后将会有变现直播,请关注CSDN社区活动公告:https://bbs.csdn.net/forums/A757291228?spm=1001.2014.3001.6682&typeId=19380

在社区中发文每周将会在活跃前十送出:

  • 一本实物书籍
  • 多份实物小礼品
  • 每月送出机械键盘等奖励。

教程所需

由于小程序开发需要一定的基础,这些基础需要提前掌握,本教程只对小程序开发进行零基础说明。

目录 持续更新:

小程序的 HelloWord 01《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》
小程序获取头像试试水 02《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》
小程序仿微信发现页 03《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》

一、简单布局

现在开始写一个获取微信头像的小程序,第一步需要对这个页面布局。
显示用户头像需要一个图片显示的区域,在小程序中需要使用<image>组件;显示获取的用户的用户名需要使用<text>组件;在此基础上还需要一个按钮,点击按钮获取用户信息,需要使用一个<button>组件。

我们回到 index.wxml 文件中,在文件中添加如下代码:

<view>
<image></image>
<text></text>
<button>获取用户信息</button>
</view>


以上代码中 view 标签是类似于 div 的标签,作为一个包裹容器。
保存后可以在预览区看到页面显示效果:

这时我们回到代码中,其中<image></image>用于显示图片,在此没有任何信息,所以在预览区中并无任何显示,<text></text>标签同样如此;在按钮标签<button>获取用户信息</button>中已出现了与标签内容一致的显示效果。

接下来我们在 index.js 中为这个按钮增加逻辑,在点击后获取用户信息。

二、信息获取

此时我们在按钮上绑定一个事件:

<button bindtap="getUserProfile">获取用户信息</button>

以上代码中 bindtap 表示为这个按钮绑定一个点击事件,响应的函数是 getUserProfile。

getUserProfile 是小程序的一个开放接口,用于获取用户信息(基础库 2.10.4 开始支持,低版本需做兼容处理。文档位置:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html)。

但是这个接口需要我们传递某一些参数,如下图所示:

其中desc是必传参数,在此处没必要搞清楚其它参数含义。
咱们需要在 index.js 中编写此函数,以至于让我们可以传参和获取用户信息。

点击 index.js 在 Page 代码中增加我们需要的函数:

getUserProfile() {
    wx.getUserProfile({
      desc: '用户注册',
      success: res => {
        console.log("获取用户信息成功", res)
      },
      fail: res => {
        console.log("获取用户信息失败", res)
      }
    })
  },

getUserProfile 函数中使用 wx.getUserProfile 表示调用公共接口,desc 为需要传递的参数,desc 所填写的内容为为什么需要调用这个接口获取信息,或者说我需要填写的信息用于什么用途。在此处是用于“用户注册”。

接着使用 success 表示调用成功后,成功获取用户信息后需要执行的流程,在此使用 console.log 打印出接收到的用户信息:

success: (res) => {
  console.log("获取用户信息成功", res)
},

其中success 所接收的 res 为获取用户信息后得到的结果。

既然有成功获取信息的流程那么必然有失败获取用户信息后所需要执行的流程,在此编写了一个失败后流程 fail:

fail: res => {
  console.log("获取用户信息失败", res)
}

当然所接收的参数名 res 可以自己设定,例如如下示例:

success: userinfo => {
	console.log("获取用户信息成功", userinfo)
},
fail: failinfo => {
	console.log("获取用户信息失败", failinfo)
}

接下来点击获取用户信息将会提示是否允许,点击允许:

接着就会在 console 中打印出用户信息:

此时我们可以从信息中发现,在整个结果 res 中,userInfo 节点是用户信息,那么只需要在console.log 中使用 res.userInfo 便可以获取到 userinfo 的信息:

console.log("获取用户信息成功", res.userInfo);

此时我们可以在 index.js 中创建一个变量存储该 userInfo 的值,如下图黄色框选位置,接着在 success 的流程中对该变量进行赋值:

data: {
    userInfo: null
  },
  getUserProfile() {
    wx.getUserProfile({
      desc: '用户注册',
      success: res => {
        console.log("获取用户信息成功", res.userInfo);
        this.setData({
          userInfo: res.userInfo
        });
      },
      fail: res => {
        console.log("获取用户信息失败", res);
      }
    })
  },


以上代码中 data:{} 表示设置变量,userInfo 是其中的变量,该变量的初始值为 null,接着再到流程中使用 this.setData 表示设置当前文件中的变量值,在 setData 中设置 userInfo的值为 res 结果中的 userInfo 节点值,此时就获得了userInfo 值,再将该值与在前端进行获取即可。

此时我们保存后测试数据,将会得到 userInfo 的信息:

三、绑定数据

接下来我们需要修改一下 index.wxml 文件的标签:

<view>
  <image src="{{userInfo.avatarUrl}}"></image>
  <text>{{userInfo.nickName}}</text>
  <button bindtap="getUserProfile">获取用户信息</button>
</view>


此时在前端页面中新增了上图框选的代码。从以上 {{userInfo.avatarUrl}} 代码可知 userInfo 是index.js 文件中的变量,而 avatarUrl 是 userInfo 变量所保存的那个节点中的一个数据;由此可知,获取后台数据只需要使用两对花括号中使用变量加一个小数点便可以获取对应的值;在此 avatarUrl 表示一个所获取到的用户头像值,nickName 表示用户的昵称,由此就获取到了用户的信息。

在代码 <image src="{{userInfo.avatarUrl}}"></image> 中,src 属性表示这个图片的来源,直接赋值后即可显示头像。

运行后的效果如下:

四、样式布局

此时我们觉得整个页面并不好看,可以在 wxss 中添加一些样式给整个布局更加美观。

此时先调节图片大小,在 index.wxss 中添加如下样式:


我们需要要注意的是 10vh 中的 vh 是视窗高度的意思。在微信小程序中 1vh 表示视窗高度的 1%;1vw表示一个视窗宽度的 1%。你可能问我为什么宽度不设置成 10vw?那是因为宽度高度肯定是不一致的,不是用同一个相同的度量去设置宽度我此时的图片就肯定不是一个圆。随后我设置了 border-radius 表示圆角设置,50% 会让我的图片变成圆角,这样就是圆形头像了。

效果如下:

接着在 wxss 中创建一个类样式 .flestyle:

.flexstyle{
  height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-around;
}


以上 flexstyle 中主要设置了一个弹性伸缩盒,其中 height:100vh 表示这个 view 高度占满 100% 视窗; display:flex 表示将对象作为弹性伸缩盒显示;flex-direction: column; 表示确定主轴方向为垂直,可以理解为这个 view 中的布局为垂直布局;align-items: center; 表示其中的元素与交叉轴的中点对齐,由于当前布局为 column 垂直布局可以理解 align-items: center; 为居中对齐;justify-content: space-between; 表示元素都等间距显示。

接着在前端代码处使用 class 对其引用:

显示结果如下:

发现并不好看,此时我们可以选择 justify-content 的属性值为 space-around,表示每个项目两侧的间隔相等,效果如下:


感觉好了很多,此时可以更改一下头像大小,或者字体大小使页面更美观。
完整样式如下:

image{
  width: 40vw;
  height: 40vw;
  border-radius: 50%;
}

text{
  font-size: 70rpx;
}

.flexstyle{
  height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-around;
}

效果如下:

有关小程序获取头像试试水 02《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  4. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  5. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  6. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  7. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  8. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  9. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  10. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

随机推荐