收藏
回答

app.js里怎么设置globalData的值,就像page里setData一样

问题模块
API和组件

app.js里怎么设置globalData的值,就像page里setData一样

最后一次编辑于  2017-05-22  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

6 个回答

  • ekong
    ekong
    2017-05-22

    嗯,这个嘛,既然这样问,或许就一言难尽了。首先,要充分理解小程序的框架:注册两个不同层次的对象,一个是程序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 的值。”

    2017-05-22
    赞同 1
    回复
  • 麦琪
    麦琪
    2017-05-22

    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)
      },


    2017-05-22
    赞同 1
    回复
  • 芝麻开门
    芝麻开门
    2018-09-11
    globalData 这个变量看来是我可以随便定呀。
    2018-09-11
    赞同
    回复
  • leisure
    leisure
    2017-05-23

    谢谢大家的回复和热心

    2017-05-23
    赞同
    回复
  • leisure
    leisure
    2017-05-23

    我看过这个示例代码,他是通过回调传参的方式把that.globalData.userInfo的值传到其它page页,但是这里也有一个问题就是你在wx.login这个函数外console.log(that.globalData.userInfo)永远都是null,不知道是不是异步的原因还是 that.globalData.userInfo = res.userInfo没有改变globalData 的值

    2017-05-23
    赞同
    回复
  • ekong
    ekong
    2017-05-22

    题外话:官方示例程序里面,有一段代码,堪称华彩乐段:

    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素养的,估计看这段代码会有点困惑的,值得好好琢磨。

    2017-05-22
    赞同
    回复