通过const app = getApp()实现在 page 页面获取 app.js 定义的属性globalData,即获取全局数据
2024-08-22 02:32:48
App.js是项目的入口文件,页面的 page.js 文件会覆盖 app.js文件,
App.js文件里面的一些方法:
onLaunch : function(){}:这个方法是当小程序加载完毕后就执行的方法
onLoad:function(options){}:页面初始化 options 为页面跳转所传递过来的参数
onReady:function(){}:页面渲染完成
onShow:function(){}:页面显示
onHide:function(){}:页面隐藏
onUnload:function(){}:页面关闭
还可以在 app.js的onLaunch里面定义一些全局的方法,如登录的方法和获取用户信息的方法(wx.getSetting),另外,在app.js里面,写上一些需要的东西,如globalData,在其他页面需要时,可以直接调用,无需一直写!
例子:
1、在app.js中App({ })里面写
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs) // 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId 验证平台账号是否登录绑定过
var that = this;
wx.request({
method: 'GET',
url: this.globalData.serverApi + "/mobileApi/user/checkBind?code="+res.code,
header: {
'content-type': 'application/json'
},
success (res) {
if(res.data.code == 301){
//未登录
var openId = res.data.openId;
wx.reLaunch({
url: '/pages/login/login?openId='+openId
})
}else if(res.data.code == 1){
//已登录
that.globalData.userInfo = res.data.userInfo;
that.globalData.token = res.data.token;
var menuList = res.data.menuList;
wx.setStorageSync('menuList', menuList);
}else if(res.data.code == 0){
//获取openId失败
wx.showToast({
title: res.data.msg,
icon: 'none',
duration: 2000
})
} // 由于 checkBind 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (that.checkBindCallback) {
that.checkBindCallback(res)
}
}
})
}
}) // 获取用户信息
/* wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
}) */
},
globalData: {
serverApi: "http://c15112b047.iok.la",
staticApi: "http://c15112b047.iok.la/uploadPath",
userInfo: null,
token: null
}
})
获取当前微信用户信息可以用在登陆页:判断是否存在登陆。登陆过就改变 app.js 里面的配置。例如这个用户是否登陆了,如果全局里面没有用户的信息,需要跳转到登陆的页面进行登陆,如果说有了用户的信息就不用跳转到登陆页面,当登陆完成之后,我们就可以设置全局的数据,然后返回到跳转的页面,直接读取用户的信息就可以。
2、在页面的index.js开头写上,然后就可以在page里面的onLoad()里调用你需要的东西!
//index.js
//获取应用实例
const app = getApp()
Page({
onLoad: function () {
if(app.globalData.token){
//代表从页面跳转过来
var menuList = wx.getStorageSync('menuList');
this.getMenuList(menuList);
this.animation = wx.createAnimation();
this.setData({hidden: false});
}else{
//代表第一次加载
wx.showLoading({
title: '加载中'
})
// 由于 checkBind 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.checkBindCallback = res => {
wx.hideLoading();
if(res.data.code == 1){
var menuList = wx.getStorageSync('menuList');
this.getMenuList(menuList);
this.animation = wx.createAnimation();
this.setData({hidden: false});
}
}
}
}
})
最新文章
- Linux实战教学笔记07:Linux系统目录结构介绍
- 【转】Artificial Neurons and Single-Layer Neural Networks
- Java 之ThreadLocal 对应C#之ThreadStatic
- uva11292 Dragon of Loowater
- Android sharePreference使用
- gulp安装和使用简介
- asp.net等项目编译失败的原因之不能写入
- 每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
- C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
- Semaphore — Windows API
- 命名空间“System.Web.Mvc”中不存在类型或命名空间“Ajax”(是否缺少程序集引用?)
- 前端编程提高之旅(六)----backbone实现todoMVC
- Python 关于字符串处理技巧
- echarts3 迁徙图 迁入迁出
- cluster.go
- nginx设置目录浏览及解决中文乱码问题
- BZOJ3560 DZY Loves Math V 数论 快速幂
- 获取进程ID,父进程ID,进程完整路径
- P3258 [JLOI2014]松鼠的新家 (简单的点差分)
- TP5.1:request请求对象(使用四种方式获取)
热门文章
- linux 高可用----keepalived+lvs
- 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜)
- 自己动手实现java断点/单步调试(二)
- HDU5213 Lucky【容斥+莫队】
- HDU6661 Acesrc and String Theory【SA】
- 组合数取模及Lucas定理
- Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)
- dict与set -- Python
- 关于TCP状态TIME_WAIT的理解
- 缓冲区溢出实验 6 exit(0)