做了五个月的小程序,对小程序有一点深刻的认识。特别是小程序的生命周期。一定要深刻的理解
1、app.js生命周期中的onLaunch异步和page.js onLoad事件。但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。
Page页面判断一下当前app.globalData.employId是否有值,如果没有(第一次)则定义定义一个app方法(回调函数)app.employIdCallback = employId => {…}。
App页面在请求success后判断时候有Page页面定义的回调方法,如果有就执行该方法。因为回调函数是在Page里面定义的所以方法作用域this是指向Page页面。
App({
onLaunch: function () {
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
data: {
},
success: function(res) {
this.globalData.employId = res.employId;
//由于这里是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.employIdCallback){
this.employIdCallback(res.employId);
}
}
})
},
globalData: {
employId: ''
}
})
//index.js
//获取应用实例
const app = getApp()
Page({
data: {
albumDisabled: true,
bindDisabled: false
},
onLoad: function () {
//判断是用户是否绑定了
if (app.globalData.employId && app.globalData.employId != '') {
this.setData({
albumDisabled: false,
bindDisabled: true
});
} else {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.employIdCallback = employId => {
if (employId != '') {
this.setData({
albumDisabled: false,
bindDisabled: true
});
}
}
}
}
})
这样的话,就能实现想要的结果。执行顺序就是:
2、还有是一个是扫码功能,我们主要的功能是游客通过扫码,显示分销的价格。但是怎么实现.因为小程序的生命周期中的onlaunch只触发一下。要是游客30秒扫一次,你在app.js里面种的onlaunch生命周期中获取手机号码,你第二次扫的时候,是获取不到手机号码的。那怎么获取?这个时候就要用到app.js里面的onshow生命周期。
3、就是小程序每次发布的时候,有些用户的程序不是最新的,那你就要执行
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
})
updateManager.onUpdateReady(function () {
updateManager.applyUpdate()
})
updateManager.onUpdateFailed(function () {
})
//一个字符串中出现字母的个数
var arrString = 'abcdaabc';
arrString.split('').reduce(function(res, cur) {
res[cur] ? res[cur] ++ : res[cur] = 1
return res;
}, {})
{a: 3, b: 2, c: 2, d: 1}
让小程序强制更新,这样用户打开的时候都是最新的版本。