微信小程序的动态网络监听-错误示范的思索
2019-03-01 本文已影响6人
AKyS佐毅
在微信小程序的实际开发中,根据网络状态动态展示不同界面。一般都是调用wx.onNetworkStatusChange
方法。
wx.onNetworkStatusChange(function(res) {
}
那么如果有超过一半的界面都需要动态网络监听,那么就会写一堆这样的网络监听。初衷是一处编写,其他任何地方都能使用。那么就需要对现有的监听进行封装。
设计的原则就是当页面加载的时候进行注册网络状态监听,如果存在了就不注册了。当界面卸载的时候移除监听即可。但是目前小程序无法继承的原因,还是需要在很多界面写注册和移除。反倒不如直接使用系统的API了。
哈哈,有点为了设计而设计了。最终回退了代码。。。。。。不过其他的监听倒是可以遵循这个原则来。
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
thisPage = this;
var pages = getCurrentPages() //获取加载的页面
var currentPage = pages[pages.length - 1] //获取当前页面的对象
var url = currentPage.route //当前页面url
thisPage.setData({
url:url
})
app.registerNetworkNotify(function (res) {
thisPage.setData({
networkStatus: res
})
}, thisPage.data.url);
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
app.deallocNetworkNotify(this.data.url);
},
registerNetworkNotify: function(action, url) {
const that = this;
var tempArray = that.data.networkArray;
var hasExs = false;
for (var i = 0; i < tempArray.length; i++) {
var item = tempArray[I];
if (item.url == url) {
hasExs = true;
break;
}
}
if (!hasExs) {
this.data.networkArray.push({
action: action,
url: url
});
}
console.log(this.data.networkArray);
console.log("newworkStatusRegister");
}
deallocNetworkNotify: function(url) {
const that = this;
let tempArray = that.data.networkArray;
let copyArray = JSON.parse(JSON.stringify(tempArray));
for (var i = 0; i < tempArray.length; i++) {
var item = tempArray[I];
if (item.url == url) {
copyArray.splice(i, 1);
}
}
that.data.networkArray = copyArray;
console.log(this.data.networkArray);
console.log("newworkStatusDealloc");
}