const app =getApp() Page({ data: { }, onShow(){ this.setData({ userInfo:app.globalData.userInfo }) }, onLoad: function (options) { }, toMyOrder(){ wx.navigateTo({ url: '/pages/me/myOders/myOrders', }) }, login(){ wx.getUserProfile({ desc: '用于完善用户信息', }) .then(res=>{ console.log(res) this.setData({ userInfo:res.userInfo }) wx.cloud.database().collection('shop_users') .where({ _openid:app.globalData.openid }) .get() .then(result=>{ console.log(result) if(result.data.length == 0){ //添加用户数据到数据库 wx.cloud.database().collection('shop_users') .add({ data:{ avatarUrl:res.userInfo.avatarUrl, nickName: res.userInfo.nickName } }) .then(addResult=>{ console.log(addResult) //获取数据库用户信息 app.getUserInfo() wx.showToast({ title: '登录成功', }) }) }else{ wx.cloud.database().collection('shop_users') .doc(result.data[0]._id) .update({ data:{ avatarUrl:res.userInfo.avatarUrl, nickName: res.userInfo.nickName } }) .then(updateResult=>{ console.log(updateResult) //获取数据库用户信息 app.getUserInfo() wx.showToast({ title: '登录成功', }) }) } }) }) }, loinOut(){ app.globalData.userInfo = null wx.setStorageSync('userInfo', null) this.setData({ userInfo:null })
时间: 2023-06-14 20:07:17 浏览: 188
这段代码是一个小程序中的页面代码,其中主要实现了以下功能:
1. 在页面显示时,将全局变量 app.globalData.userInfo 中的用户信息赋值给页面的 data 中的 userInfo 变量。
2. 点击“我的订单”按钮时,跳转到“我的订单”页面。
3. 点击“登录”按钮时,调用 wx.getUserProfile 接口获取用户的头像和昵称等信息,并将其保存到数据库中。如果该用户已经存在于数据库中,则更新其信息。
4. 点击“退出登录”按钮时,将全局变量 app.globalData.userInfo 和本地存储中的 userInfo 变量都设为 null,并将页面的 userInfo 变量也设为 null。
总体来说,这段代码实现了一个小程序中常见的用户登录、退出登录和跳转页面等功能。
相关问题
const app = getApp()是什么意思
`getApp()`是一个全局函数,用于获取小程序实例,而`const app = getApp()`则是将小程序实例赋值给名为`app`的常量。
在小程序中,`app`对象是一个全局的单例,可以用来存储全局数据和方法。在小程序的生命周期中,只有一个`app`对象,其他页面和组件都可以通过`getApp()`函数获取到该实例,从而实现跨页面和组件的数据共享和通信。
例如,我们可以在`app.js`文件中定义全局数据和方法:
```javascript
App({
globalData: {
userInfo: null
},
getUserInfo: function(callback) {
// 获取用户信息的方法
}
})
```
然后在其他页面和组件中通过`getApp()`函数获取`app`对象,从而可以访问其中定义的全局数据和方法:
```javascript
const app = getApp()
// 获取全局数据
console.log(app.globalData.userInfo)
// 调用全局方法
app.getUserInfo(function(userInfo) {
console.log(userInfo)
})
```
总之,`getApp()`和`const app = getApp()`的作用是获取全局的小程序实例,方便在不同页面和组件中共享数据和方法。
微信小程序的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。
阅读全文