小程序
小游戏
企业微信
微信支付
扫描小程序码分享
app.js里怎么设置globalData的值,就像page里setData一样
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
嗯,这个嘛,既然这样问,或许就一言难尽了。首先,要充分理解小程序的框架:注册两个不同层次的对象,一个是程序app,一个是页面page,一个小程序就只有一个app,而page可以有多个,就是说一个app,加上若干个page,就构成了小程序。其次是要理解数据绑定机制,即逻辑层与视图层的数据设置、传递和刷新的机制。官方示例小程序中的globalData,是app里面的,对于小程序而言,就相当于全局对象了,所以,要设置globalData的值,在app,js里面,可直接设置,即示例里面的this.globalData.userinfo了,如:this.globalData.userinfo='xxxx'之类,而在page里面呢,首先要通过getApp()来获得app对象,如示例代码里面的var app = getApp(),然后就可以用app.globalData来访问全局对象里面的某个数据了,如app.globalData.userinfo。再来看setData()这个函数,它是Page对象的函数(方法),而非app对象的函数,只能用来设置(绑定)页面数据。进一步来看,页面中的data数据,其实也是可以直接以this.data.xxx来访问的,但这样却不能绑定到视图层里面去,官方文档的原话就是:“setData 函数用于将数据从逻辑层发送到视图层,同时改变对应的 this.data 的值。”
setData
this.data
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
app.js
App({
globalData:{
userInfo:
null
,
text:
'111'
}
})
abc.js
onLoad:
function
(e){
var
that=
this
console.log(app.globalData.text)
app.globalData.text =
'222'
},
谢谢大家的回复和热心
我看过这个示例代码,他是通过回调传参的方式把that.globalData.userInfo的值传到其它page页,但是这里也有一个问题就是你在wx.login这个函数外console.log(that.globalData.userInfo)永远都是null,不知道是不是异步的原因还是 that.globalData.userInfo = res.userInfo没有改变globalData 的值
题外话:官方示例程序里面,有一段代码,堪称华彩乐段:
getUserInfo:function(cb){ var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //调用登录接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) } }) } }) } }
这其实是一个自定义函数,没有一定javascript素养的,估计看这段代码会有点困惑的,值得好好琢磨。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
嗯,这个嘛,既然这样问,或许就一言难尽了。首先,要充分理解小程序的框架:注册两个不同层次的对象,一个是程序app,一个是页面page,一个小程序就只有一个app,而page可以有多个,就是说一个app,加上若干个page,就构成了小程序。其次是要理解数据绑定机制,即逻辑层与视图层的数据设置、传递和刷新的机制。官方示例小程序中的globalData,是app里面的,对于小程序而言,就相当于全局对象了,所以,要设置globalData的值,在app,js里面,可直接设置,即示例里面的this.globalData.userinfo了,如:this.globalData.userinfo='xxxx'之类,而在page里面呢,首先要通过getApp()来获得app对象,如示例代码里面的var app = getApp(),然后就可以用app.globalData来访问全局对象里面的某个数据了,如app.globalData.userinfo。再来看setData()这个函数,它是Page对象的函数(方法),而非app对象的函数,只能用来设置(绑定)页面数据。进一步来看,页面中的data数据,其实也是可以直接以this.data.xxx来访问的,但这样却不能绑定到视图层里面去,官方文档的原话就是:“
setData
函数用于将数据从逻辑层发送到视图层,同时改变对应的this.data
的值。”app.js
App({
globalData:{
userInfo:
null
,
text:
'111'
}
})
abc.js
onLoad:
function
(e){
var
that=
this
console.log(app.globalData.text)
app.globalData.text =
'222'
console.log(app.globalData.text)
},
谢谢大家的回复和热心
我看过这个示例代码,他是通过回调传参的方式把that.globalData.userInfo的值传到其它page页,但是这里也有一个问题就是你在wx.login这个函数外console.log(that.globalData.userInfo)永远都是null,不知道是不是异步的原因还是 that.globalData.userInfo = res.userInfo没有改变globalData 的值
题外话:官方示例程序里面,有一段代码,堪称华彩乐段:
getUserInfo:function(cb){
var that = this
if(this.globalData.userInfo){
typeof cb == "function" && cb(this.globalData.userInfo)
}else{
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
}
这其实是一个自定义函数,没有一定javascript素养的,估计看这段代码会有点困惑的,值得好好琢磨。