注册程序
App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。App() 必须在 app.js 中注册,只能注册一个。使用this可以拿到app实例。
App({
d: {
token: 1,
appId: " ",
appKey: " ",
hostUrl: 'http://xxx.com/',
hostImg: ' http://xxx.com/upload/',
},
onLaunch: function () {
var that = this;
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs);
var token = wx.getStorageSync('token');
that.d.token = token;
if(!token){
this.getUserInfo();
}
},
//登录并获取用户信息
getUserInfo:function(cb){
var that = this;
if(this.globalData.userInfo){
typeof cb == "function" && cb(this.globalData.userInfo);
console.log(this.globalData.userInfo);
}else{
//调用登录接口获取登录凭证code
wx.login({
success: function (res) {
var code = res.code;
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo;
console.log('以下是app.js从微信端获取的用户信息');
console.log(res.userInfo);
wx.setStorageSync('nickName', res.userInfo.nickName);
wx.setStorageSync('avatarUrl', res.userInfo.avatarUrl);
wx.setStorageSync('city', res.userInfo.city);
wx.setStorageSync('country', res.userInfo.country);
wx.setStorageSync('province', res.userInfo.province);
typeof cb == "function" && cb(that.globalData.userInfo);
that.getUserSessionKey(code);
}
});
}
});
}
},
//获取会话密钥
getUserSessionKey:function(code){
var that = this;
wx.request({
url: that.d.hostUrl+'public/wxAppUserCodeComes',
method:'post',
data: {
code: code
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function (res) {
var userData = res.data.data;
var userDataInfo = userData.user_info;
console.log('以下是app.js用code换取了token 和open_id和session_key 如果绑定了还会返回user_name real_name等其他信息')
console.log(userData); //token user_info{wx_app_open_id ,wx_app_session_key}
var token = userData.token;
var userId= userDataInfo.wx_app_open_id
//客户端存储token
wx.setStorageSync('token', token);
if (!userId) {
wx.showToast({
title: '登录失败!',
duration: 3000
});
return false;
}
that.d.token = token;
that.onLoginUser();
},
fail:function(e){
wx.showToast({
title: '网络异常!err:getsessionkeys',
duration: 2000
});
},
});
},
//上传用户信息
onLoginUser:function(){
var that = this;
var user = that.globalData.userInfo;
var token = that.d.token;
wx.request({
url: that.d.hostUrl + 'public/updateWxUserInfo',
method:'post',
data: {
token: token,
nick_name: user.nickName,
avatar_url: user.avatarUrl,
gender:user.gender,
city:user.city,
province: user.province,
country:user.country,
language:user.language
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function (res) {
//console.log(res.data); OK done:true
console.log('以下是app.js上传用户信息后打印的全局用户数据');
console.log(that.globalData.userInfo);
var data = res.data;
},
fail:function(e){
wx.showToast({
title: '网络异常!err:authlogin',
duration: 2000
});
},
});
},
globalData:{
userInfo:null,
products: [],
carts:[]
},
onPullDownRefresh: function (){
wx.stopPullDownRefresh();
}
});
小程序的生命周期函数
属性 | 类型 | 描述 | 触发时机 |
---|---|---|---|
onLaunch | Function | 监听小程序初始化 | 当小程序初始化完成时,会触发 onLaunch(全局只触发一次) |
onShow | Function | 监听小程序显示 | 当小程序启动,或从后台进入前台显示,会触发 onShow |
onHide | Function | 监听小程序隐藏 | 当小程序从前台进入后台,会触发 onHide |
onError | Function | 错误监听函数 | 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息 |
其他 | Any | 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问 |
getApp()
全局的 getApp() 函数可以用来获取到小程序实例。
// other.js
var app = getApp()
console.log(app.globalData) // I am global data