在微信小程序中app.globalData和setStorageSync有什么区别
时间: 2023-12-27 14:03:14 浏览: 181
在微信小程序中,app.globalData和setStorageSync都是用来存储数据的。但是它们有着不同的作用和使用方法。
首先,app.globalData是全局变量,可以在小程序的任何一个页面中访问和修改。它适用于存储小程序中全局的数据,比如用户信息、设置等。
而setStorageSync是小程序中的同步本地缓存API,用于存储一些临时性的、不需要全局访问的数据。它的作用是将数据存储到本地缓存中,可以在小程序的当前页面或者其他页面中访问和修改。但是需要注意的是,setStorageSync是同步操作,如果存储的数据量比较大,可能会阻塞主线程,影响小程序的性能。
因此,app.globalData适用于存储全局数据,setStorageSync适用于存储临时数据。
相关问题
微信小程序wx.getStorageSync和app.globalData和wx.navigateTo 与 wx.redirectTo保存数据有什么区别?
微信小程序中,wx.getStorageSync可以用来同步获取本地缓存中指定 key 对应的内容,而app.globalData是小程序的全局数据存储对象,可以在小程序的不同页面共享数据。wx.navigateTo和wx.redirectTo则是小程序中的页面跳转API,其中wx.navigateTo可以跳转到应用内的某个页面,而wx.redirectTo可以关闭当前页面并跳转到应用内的某个页面。
关于保存数据,wx.getStorageSync和app.globalData都是将数据存储在客户端本地,而wx.navigateTo和wx.redirectTo则不适合用来保存数据,因为它们只是用来进行页面间的跳转,不会在客户端本地存储任何数据。如果需要将数据保存在客户端本地,可以使用wx.setStorageSync或wx.setStorage,其中wx.setStorageSync是同步保存数据到本地缓存,而wx.setStorage是异步保存数据到本地缓存。
微信小程序的app.js中写有whatDay的函数,但在其他页面调用这个全局函数时,报错this.setData is not a function
这个错误通常发生在尝试在一个非 Page 或 Component 的 JS 文件中调用 `this.setData` 方法时。因为 `this` 所指向的对象不是 Page 或 Component 实例,而是当前 JS 文件本身,因此并没有 `setData` 方法,所以会报错。
要解决这个问题,可以通过以下两种方式之一:
1. 在 Page 或 Component 中调用全局函数
可以将全局函数定义在 app.js 中,并在 Page 或 Component 中通过 getApp() 方法获取 app 实例,然后通过 app 实例调用全局函数,例如:
在 app.js 中定义全局函数:
```
App({
whatDay: function() {
let Time = new Date()
let Year = Time.getFullYear()
let Month = Time.getMonth() + 1
let Day = Time.getDate()
return '' + Year + Month + Day
}
})
```
在 Page 或 Component 中调用全局函数:
```
const app = getApp()
Page({
data: {
whatDay: ''
},
onLoad: function () {
let day = app.whatDay()
this.setData({
whatDay: day
})
}
})
```
通过 app 实例调用全局函数,可以避免在非 Page 或 Component 的 JS 文件中使用 `this.setData` 方法。
2. 在非 Page 或 Component 的 JS 文件中使用 wx.setStorageSync() 方法
如果需要在非 Page 或 Component 的 JS 文件中保存数据,可以使用 `wx.setStorageSync` 方法代替 `this.setData` 方法,例如:
在 app.js 中定义全局变量:
```
App({
globalData: {
whatDay: ''
},
whatDay: function() {
let Time = new Date()
let Year = Time.getFullYear()
let Month = Time.getMonth() + 1
let Day = Time.getDate()
let dayStr = '' + Year + Month + Day
this.globalData.whatDay = dayStr
wx.setStorageSync('whatDay', dayStr)
}
})
```
在其他 JS 文件中获取全局变量:
```
const app = getApp()
let whatDay = wx.getStorageSync('whatDay')
if (whatDay) {
app.globalData.whatDay = whatDay
}
console.log('全局变量里当天的日期为', app.globalData.whatDay)
```
在这种方式中,可以在非 Page 或 Component 的 JS 文件中使用 `wx.setStorageSync` 方法保存数据,而不会报 `this.setData is not a function` 的错误。但是,需要注意的是,`wx.setStorageSync` 方法只能保存字符串或 ArrayBuffer 类型的数据,如果需要保存其他类型的数据,需要先将其转换为字符串或 ArrayBuffer。
阅读全文