v3
模式加速了首页nvue
的启动速度,当在首页nvue
中访问getApp
不一定可以获取真正的App
对象.
nvue
首页使用const app = getApp({allowDefault: true})
, 这样能获取一个app
对象,可以使用这个app
对象操作globalData
,但是注意这时候不能获取App.vue
内globalData
设置的初始值.
# 疑问
- 使用
allowDefault
时,是否可以对app
中的globalData
进行赋值操作,下一次继续使用allowDefault
获取的app
,能不能提取到赋值之后的globalData
; allowDefault
获取到的app
,它的globalData
赋值之后是不是会同步到getApp
的app
对象;
# 进一步解释
比如我页面,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()
}
}