如题:
当动态设置了app.datas的值之后,打开小程序,在其它页面app.datas读取的值却为undefined
然之前开发的版本,这样做都是没有问题的,现在怎么做都无法读取?
网友回复:
仔细看了一下,不是无法传递,而是无法动态改变,那之前的为毛可以?
比如先设定app.datas=null
进入主页后,先支行APP里的方法让app.setdatas();//设置app.datas-=100
此时,在没关闭页面的情况下,再在其它页面输出app.datas仍然是空。
怎么设置都无用,采用了globalData也无法动态改变其值。难道是BUG?
这个大概属于 js 语法层级的东西,想出 BUG 都难哪,呵呵
还是直接贴代码吧,否则没法猜。
App({
userArray:{},
login:function(){
var that=this;
这里是发送一个POST,返回结果正确,返回的是用户数据
返回成功后
log(res.data)
that.userArray=res.data;
//调试没问题
}
})
index.js
加载页面后调用app.login();这里一切正常,也能返回数据。之后再:
log(app.userArray.id) 数据就无法再调用,仍是空
在app里将这些变量放在globalData里,
如:globalData:{userArray:{}}再去使用login动态去改变这个值,再如上操作在其它页面还是获取不到。只有在方法里才可以输出返回的数据。
但是在没更新之前做的一个小程序也是这样用的,是没有问题的,而且操作过app.login()之后,在其它页面里均可用
app.userArray.xxx进行调用。
那么问题就来了,若是这样做无效,为什么上一个小程序没问题,且放在globalData里也无法调用呢?
又测试了一下,静态的值是可以获取的,现在是不能动态改变VAR变量的值。按道理来讲应该是能改变的。并且上一个完成的小程序是可以使用的。所以是搞不懂了。
问题找到了,本来是按顺序写的,却出现了优先级的问题,
导致APP POST方法还没有返回,就执行了后面的操作,所以APP.USERARRAY的值还没有取到。
之前INDEX首页没有立即使用到POST回调的数据。
分开放在ONLAUNCH和ONSHOW里效果也不明显。再重新用其它办法吧。。。
在 app.js 中把对该数据的访问包装成一个异步方法,通过回调函数提供数据。