通过const app = getApp()实现在 page 页面获取 app.js 定义的属性globalData,即获取全局数据
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});
}
}
}
}
})
通过const app = getApp()实现在 page 页面获取 app.js 定义的属性globalData,即获取全局数据的更多相关文章
- 微信小程序实战:app主页面保存page页面实例
先上代码. app.js //app.js App({ onLaunch: function () { // 登录 wx.login({ success: res => { if (this.g ...
- 【微信小程序】Page页面跳转(路由/返回)并传参
页面跳转的方法参考官方文档: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/route.html 问题:使用wx.na ...
- 点击页面判断是否安装app并打开,否则跳转app store的方法
常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码.但往往我们都是直接给推广图片加了一个下载链接(App Store中的).所以咱们来模拟一下用 ...
- h5页面唤起app(iOS和Android),没有安装则跳转下载页面
浏览器和app没有通信协议,所以h5不知道用户的手机释放安装了app.因此只能是h5去尝试唤起app,若不能唤起,引导用户去下载我们的app. 微信里屏蔽了 schema 协议,如果在微信中打开h5, ...
- .NET Page页面事件执行顺序,以及其作用(OnPreInit()、OnInit()等)
以按钮事件为测试标准 1. OnPreInit //检查 IsPostBack 属性来确定是不是第一次处理该页. //创建或重新创建动态控件. //动态设置主控页. //动态设置 Theme 属性. ...
- Hybrid APP之Native和H5页面交互原理
Hybrid APP之Native和H5页面交互原理 Hybrid APP的关键是原生页面与H5页面直接的交互,如下图,痛过JSBridge,H5页面可以调用Native的api,Native也可调用 ...
- App跟web定位元素页面相互切换
很多QA在做UI自动化或者App自动化的时候,会遇到在web页面要抓取App模式的元素,或者是在App要抓取H5页面的元素,从网上整理了一些方法,不一定能解决,但是试一下也未尝不可,如果解决了就记得关 ...
- 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器都会被屏蔽.这是微信对第三方下载域名实施的拦截政策.被拦截了用户在微信内打开就会提示“已停止访问该网页”. 那么当我们遇到这个 ...
- APP中内嵌H5页面为什么不能下载?
在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...
随机推荐
- DFS——求图的连通性问题
DFS作为一个竞赛必学的一个知识点,怎么说我都得写一下 遍历就相当于爆搜,只不过是搜的方式比较规整罢了. 深度优先遍历:为了避免重复访问某个顶点,可以设一个标志数组vis[i],未访问时值为0,访问一 ...
- Codeforces 1355 D. Game With Array
传送门:D - Game With Array 题意:让你构造一个长度为n的序列,并且n个数的和为S,问能不能找到一个1~n的数k,使得数组里找不出一个子序列的和为k或者n-k: 题解:最简单的想法肯 ...
- Little Difference Gym - 101612L 思维
题意: 给你一个数n,你需要输出它可以由那几个数相乘构成,我们设可以由x个数构成,这x个数中最小值为minn,最大值为maxx,那么要求maxx-minn<=1 问你满足上面要求的情况有多少种. ...
- zjnu1716 NEKAMELEONI (线段树)
Description "Hey! I have an awesome task with chameleons, 5 th task for Saturday's competition. ...
- 【noi 2.6_90】滑雪(DP)
题意:输出最长下降路径的长度. 解法:f[i][j]表示结尾于(i,j)的最长的长度.由于无法确定4个方位已修改到最佳,所以用递归实现. 1 #include<cstdio> 2 #inc ...
- python爬取网易翻译 和MD5加密
一.程序需要知识 1.python中随机数的生成 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0, ...
- poj 3436 ACM Computer Factory 最大流+记录路径
题目 题意: 每一个机器有一个物品最大工作数量,还有一个对什么物品进行加工,加工后的物品是什么样.给你无限多个初始都是000....的机器,你需要找出来经过这些机器操作后最多有多少成功的机器(111. ...
- [Golang]-5 协程、通道及其缓冲、同步、方向和选择器
目录 协程 通道 通道缓冲 通道同步 通道方向 通道选择器 协程 Go 协程 在执行上来说是轻量级的线程. 代码演示 import ( "fmt" "time" ...
- Atlas 读写分离 & Atlas + MHA 故障自动恢复
目录 Atals 介绍 Atlas 主要功能 Atlas 相对于官方 MySQL-Proxy 的优势 Atlas 使用 Atlas 安装 Atlas 目录 Atlas 配置 Atlas 启动 Atla ...
- Django的settings配置文件
一.邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' EMAI ...