1. App()函数
1.1 什么是App()函数
若要在微信小程序启动、显示、隐藏时执行某些操作,或者在各个页面中需要共享一些数据时,可以通过App()函数实现。App()函数用于注册一个微信小程序,该函数必须在app.js文件中调用,且只能调用一次。
App()函数的参数是一个对象,通过该对象可以指定应用生命周期回调函数和保存一些共享数据。
1.2 应用生命周期函数
应用生命周期函数是指微信小程序“启动→运行→销毁”期间依次调用的函数。
1.3 应用生命周期回调函数
| 函数名 |
说明 |
|---|---|
| onLaunch() | 监听微信小程序初始化,微信小程序初始化完成时触发,全局只触发一次 |
| onShow() | 监听微信小程序启动或切前台,微信小程序启动或从后台进入前台时触发 |
| onError() | 错误监听函数,微信小程序脚本错误或者 API 调用报错时触发 |
| onHide() | 监听微信小程序切后台,微信小程序从前台进入后台时触发 |
| onPageNotFound() | 页面不存在监听函数,微信小程序要打开的页面不存在时触发 |
1.4 演示App实例的获取
// getApp()函数获取微信小程序全局唯一的App实例
const app = getApp()
通过getApp()函数获取App实例之后,可以访问App实例的属性或调用App实例的方法。
注意:
定义在App()函数的参数{ }中的方法,可以直接使用this获取App实例,不必使用getApp()函数。
2 编写“用户登录”微信小程序
2 .1 准备工作
创建项目: 创建一个新的微信小程序项目,项目名称为“用户登录”,模板选择“不使用模板”。
配置导航栏: 在 pages/index/index.json 文件中配置页面导航栏。
复制素材: 复制 pages/index/index.wxss 文件和 images 文件夹。
启动服务器: 进入“服务器端”文件夹,在 index.js 文件的 wx 对象中填写自己的 appid 和 appsecret。执行命令启动服务器 node index.js 。
2.2 实现小程序启动时自动执行登录操作步骤
- 定义页面所需的数据;
- 在微信小程序启动时调用login()方法实现自动登录;
- 在微信开发者工具的本地设置中勾选“不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书”复选框。
运行程序,微信小程序控制台输出结果、服务器控制台输出结果如下图所示

微信小程序控制台输出结果:获得了login code并收到了服务器返回的token,说明登录成功。
服务器控制台输出结果:获取到login code和session,并且session中包含session_key和openid,说明用户登录凭证code验证成功。
2.3 程序代码
2.3.1 app.js 文件代码
在 app.js 文件中编写如下代码信息:
// app.js
App({
onLaunch: function () {
this.checkLogin(res => {
console.log('is_login: ', res.is_login)
if (!res.is_login) {
this.login()
}
})
},
login: function () {
wx.login({
success: res => {
console.log('login code: ' + res.code)
wx.request({
url: 'http://127.0.0.1:3000/login',
method: 'post',
data: {
code: res.code
},
success: res => {
console.log('token: ' + res.data.token)
// 将token保存为公共 数据,用于在所有页面中共享token
this.globalData.token = res.data.token
// 将token保存到数据缓存
wx.setStorage({
key: 'token',
data: res.data.token
})
}
})
}
})
},
checkLogin: function (callback) {
var token = this.globalData.token
if (!token) {
// 从数据缓存中获取token
token = wx.getStorageSync('token')
if (token) {
this.globalData.token = token
} else {
callback({ is_login: false })
return
}
}
wx.request({
url: 'http://127.0.0.1:3000/checklogin',
data: { token: token },
success: res => {
callback({ is_login: res.data.is_login })
}
})
},
// 定义页面所需的数据
globalData: {
token: null // 保存token
}
})
2.3.2 编写 index.wxss 文件
在pages/index/index.wxss 文件中编写如下代码:
/**index.wxss**/
.avatar-wrapper {
width: 160rpx;
height: 160rpx;
padding: 0;
background: none;
}
.avatar {
width: 160rpx;
height: 160rpx;
border-radius: 20rpx;
}
.nickname {
width: 80%;
height: 100rpx;
margin: 20px auto;
border: 1px solid #000000;
text-align: center;
}
2.3.3 编写 index.wxml 文件
在 pages/index/index.wxml文件中编写如下代码:
<!--index.wxml-->
<button class="avatar-wrapper" open-type="chooseAvatar" bindchooseavatar="onChooseAvatar">
<image class="avatar" src="{{ avatarUrl }}"></image>
</button>
<input type="nickname" class="nickname" placeholder="请输入昵称" />
<button bindtap="credit">获取用户的积分</button>
2 .3.4 编写 index.wxml 文件
// index.js
const app = getApp()
const defaultAvatar = '/images/avatar.png'
Page({
data: {
avatarUrl: defaultAvatar,
},
credit: function () {
wx.request({
url: 'http://127.0.0.1:3000/credit',
data: {
token: app.globalData.token
},
success: res => {
console.log(res.data)
}
})
},
onChooseAvatar: function (e) {
console.log(e)
const { avatarUrl } = e.detail
this.setData({ avatarUrl })
},
})
评论