浅谈小程序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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。