微信小程序的app.js中写有whatDay的函数,但在其他页面调用这个全局函数时,报错this.setData is not a function
时间: 2024-02-22 21:58:34 浏览: 71
这个错误通常发生在尝试在一个非 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。
阅读全文