收藏
回答

新手提问 如何使用app.js中的数据如何使用?

小程序页面要获取app.js中的数据

App({
  onLaunchfunction () {
    
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        env'kk-cloud-test',
        traceUsertrue,
      })
    }


    this.globalData = {
      openid""//用户唯一标识
      avatarUrl""//头像
      nickName"" //昵称
    }
  },


  //获取openid方法,再index中调用过一次
  getOpenIdfunction () {
    wx.cloud.callFunction({
      name'login', 
      data: {},
      success: (res => {
        console.log('[云函数] [login] user openid: ', res.result.openid)
        this.globalData.openid = res.result.openid
        console.log(this.globalData.openid);
      }),
      failerr => {
        console.error('[云函数] [login] 调用失败', err)
      }
    })
  }

})


需要app.js中的数据的页面代码:

const app = getApp();
Page({
  data: {
    name:"昵称",
    src:"../../images/logo.png"
  },
  onLoad: function (options) {
    this.setData({name:app.nickName});
    this.setData({src:app.avatarUrl});
    
    console.log("方式1-id"+app.openid)
    console.log("方式1-nc"+app.nickName)


    console.log("方式2-id"+app.globalData.openid);
    console.log("方式2-nc"+app.globalData.nickName);
  },
//收藏列表按钮
  btn_course:function(e){
    wx.navigateTo({
      url: 'collection_course/collection_course',
      success: (result) => {},
      fail: (res) => {},
      complete: (res) => {},
    })
  }
})


为什么获取同一地方的数据,打印结果却不一样?

相关赋值代码:

代码块1
bindGetUserInfofunction(e{
  var that = this
  wx.getUserProfile({
    desc'用于完善会员资料', 
    success(res) => {
      console.log("新登入方法profile");
      console.log(res);
      app.nickName=res.userInfo.nickName;
      app.avatarUrl=res.userInfo.avatarUrl;
      console.log("1"+app.nickName);
      that.setData({
        isHidefalse
      });
    },

代码块2
const app = getApp();
onLoad: function (options{
    app.getOpenId()
}


结果:

所以到底如何获取app.js中的globalData?
最后一次编辑于  2021-04-14
回答关注问题邀请回答
收藏

3 个回答

  • xplee
    xplee
    2021-04-14

    看你在app中怎么定义

    第一种:
    App({
      openid:null,
      nickName:null,
      onLaunch: function(){},
      ...
    })
    使用
    const app = getApp();
    app.openid
    
    第二种(推荐):
    App({
      globalData:{ openid:null, nickName:null },
      onLaunch: function(){},
      ...
    })
    使用
    const app = getApp();
    app.globalData.nickName
    


    2021-04-14
    有用 2
    回复 1
  • 当乙醇爱上了铜
    当乙醇爱上了铜
    2021-04-14

    app是个对象,你如果直接把属性放在app里,比如getOpenId函数,比如nickName,那么用getApp()实例化得到app实例后直接app.getOpenId()和app.nickName即可,但是这样会导致那些是全局的变量不是很清晰,所以通常会在app里面放个对象,globalData,然后再这里面放属性,这样的话就需要app.globalData.xxx了。

    还有建议你console.log("方式1-id"+app.openid)输出这样写:console.log("方式1-id", app.openid),不然会吧第二个内容自动转为字符串,情况复杂了不方便调试。

    2021-04-14
    有用 1
    回复 1
  • Mr.Zhao
    Mr.Zhao
    发表于小程序端
    2021-04-14

    app.globalData

    2021-04-14
    有用 1
    回复 7
    • 愿你归来仍少年
      愿你归来仍少年
      2021-04-14
      那为啥console.log('方式2-nc‘+app.globalData.nickName)拿不到数据,而app.nickName却又可以呢?求指教
      2021-04-14
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于小程序端
      2021-04-14回复愿你归来仍少年

      你只亮了部分代码,让别人解释原因就是玩别人

      2021-04-14
      回复
    • 愿你归来仍少年
      愿你归来仍少年
      2021-04-14回复Mr.Zhao
      抱歉哈,我不太知道要给啥代码,等我再编辑一下
      2021-04-14
      回复
    • Mr.Zhao
      Mr.Zhao
      发表于小程序端
      2021-04-14回复愿你归来仍少年

      你赋值的代码就没给,关键代码不给,让别人猜

      2021-04-14
      回复
    • 愿你归来仍少年
      愿你归来仍少年
      2021-04-14回复Mr.Zhao
      好了好了
      2021-04-14
      回复
    查看更多(2)
登录 后发表内容
问题标签