新手提问 如何使用app.js中的数据如何使用?
发布于 6 年前 作者 pingcao 9346 次浏览 来自 官方Issues

小程序页面要获取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?
3 回复

看你在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

app.globalData

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),不然会吧第二个内容自动转为字符串,情况复杂了不方便调试。

回到顶部