当一个文件在后台下载,我们需要当文件下载成功后,自动进行一些行为(弹出一个下载成功的弹窗或者刷新当前页面);
以微信小程序的下载为例,通过app.js里的全局变量来对其他页面进行通知
// app.js
App({
globalData: {
userInfo: null
},
watchProperty: function (method = function () {}, atrrs, value ) {
var obj = this.globalData;
Object.defineProperty(obj, atrrs, {
configurable: true,
enumerable: true,
set: function (_value) {
value = _value;
method(value);
},
get: function () {
return value;
}
})
},
})
参数method为我们希望该值改变后所执行的函数,
atrrs为我们想要监听的全局变量,
value为全局变量的初始值。
其他页面的使用
onLoad() {
const app = getApp();
app.watchProperty(this.updata, 'new_atrrs', 'old_value');
//下面的定时器可以在其他页面使用,例如其他页面的异步操作完成后,改变app.globalData.new_atrrs值,那么就会触发这个页面的updata()函数
setTimeout(() => {
app.globalData.new_atrrs = 'new_value'
},5000);
},
updata() {
console.log(app.globalData.new_atrrs);
const pages = getCurrentPages();
const perpage = pages[pages.length - 1];
//页面刷新
// perpage.onLoad({
// id: ''//传入页面参数
// });
//perpage便是该页面的Page实例,perpage === this
perpage.one(perpage);//给函数one传入Page实例的值,那么我们便可以使用该页面的任意函数
},
one(_this) {//通过_this接受this值,解决this指向问题
_this.setData({
one:0,
two:1,
three:0
})
console.log(_this.data.one);//=> 0
},
监听数据完成