浅谈小程序globalData的那些事儿
我在严冬下掘起结冰的泥土,我在黑暗的战壕里跃动,我用生命守护房屋的石板,我在散发着焦土味的废墟下长眠。
小程序中,除了每个页面有自己的data,还有个全局数据存储地方:globalData,获取方式如下:
letglobalData=getApp().globalData
实际业务代码中总会遇到这种情况:写着写着发现需要用全局数据,但是不能直接就在当前函数里直接写上面的一段代码,因为要和别的函数共用,所以返回js文件顶部添加一段代码,再返回刚刚断掉的地方继续写,类似这样:
//省略12行
letglobalData=getApp().globalData
//省略15行
Page({
data:{...}
//..省略863行
onButtonTap(e){
//...
letmyData=globalData.myData
//...
}
})
经过这么一折腾,可能刚刚的代码思路都没了。那能不能直接在想用的函数里直接方便的获取这个globalData呢?比如:
//省略27行
Page({
data:{...}
//..省略863行
onButtonTap(e){
//...
letmyData=this.globalData.myData
//...
}
})
或者换种方式获取和设置myData:
letmyData=this.$global('myData')
//...
this.$global('myData',2)
实现global方法
functionglobal(name,value){
varglobalData=getApp().globalData
vardata={}
//this.$global()
if(arguments.length===0){
returnglobalData
}
//this.$global('myData')
if(arguments.length===1){
if(is.string(name)){
returnglobalData[name]
}
//this.$global({
//name:1
//})
if(is.object(name)){
data=name
}
}
//this.$global('myData',2)
if(arguments.length===2){
data[name]=value
}
returnextend(data,data)
}
其中,is.string和is.object是类型判断函数。简单实现了多种操作globalData的方法,详细见注释。
挂载到this
函数有了,那么怎么挂在到小程序页面的this中呢,看过前几篇可能知道,要对小程序原有的Page函数进行改造。
有两种方式,一种是直接添加到config里:
varoriginPage=Page
varglobal=require('../utils/global')
functionMyPage(config){
//...
config.$global=global
//...
originPage(config)
}
functionpage(config){
returnnewMyPage(config)
}
或者在代理后的onLoad函数里定义:
varoriginPage=Page
varglobal=require('../utils/global')
functionMyPage(config){
this.watch=config.watch
this.lifetimeBackup={
onLoad:config.onLoad
}
config.onLoad=function(options){
this.$global=global
//其他代码
this.lifetimeBackup.onLoad.call(this,options)
}
//...
originPage(config)
}
总结
利用这种方式,可以定义很多通用的小程序页面的方法,比如在摩拜小程序内部封装了this.$util、this.$navigate等适合自身业务的工具方法等。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。