v3模式加速了首页 nvue 的启动速度,当在首页 nvue 中访问 getApp 不一定可以获取真正的 App 对象.

nvue 首页使用 const app = getApp({allowDefault: true}) , 这样能获取一个 app 对象,可以使用这个 app 对象操作 globalData,但是注意这时候不能获取 App.vueglobalData 设置的初始值.

# 疑问

  • 使用 allowDefault 时,是否可以对 app中的 globalData 进行赋值操作,下一次继续使用 allowDefault获取的app,能不能提取到赋值之后的globalData
  • allowDefault获取到的app,它的globalData赋值之后是不是会同步到getAppapp对象;

# 进一步解释

比如我页面,getApp() 还是 undefined 的时候,我使用 getApp({allowDefault: true}) 来 将数据存入它的 globalData。然后我在 后面 用 getApp() 来直接获取到了 app 对象,这个时候 我能从 这个 app 对象 获取到 前面使用 allowDefault 赋值的 globalData 吗?

再直接一点就是: getApp 使用的就是 单例,不管如何调用,getApp({allowDefault: true})getApp() 实际上就是 同一个 对象。

只不过 getApp() 需要依赖 app.vue 里面的 状态 来做初始化,而 getApp({allowDefault: true}) 直接就是 自己初始化,不依赖 app.vue. 它们 实际上 就是 同一个 对象。当 getApp({allowDefault: true}) 已经被调用,生成对象a的时候,再调用 getApp(), 获得的就是 对象a.

# 回复

可以这么理解吧,下面这样的代码应该就是你要实现的效果吧

onLoad() {
    const app = getApp({
        allowDefault: true
    })
    app.test = function() {
        console.log('app.test', 'test')
    }
    app.globalData.a = 'a'
},
methods: {
    onClick() {
        const app = getApp()
        console.log('app.globalData.a', app.globalData.a)
        app.test()
    }
}

v3 getApp (opens new window)