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 21:07:17 浏览: 78
这段代码是一个小程序中的页面代码,其中主要实现了以下功能:
1. 在页面显示时,将全局变量 app.globalData.userInfo 中的用户信息赋值给页面的 data 中的 userInfo 变量。
2. 点击“我的订单”按钮时,跳转到“我的订单”页面。
3. 点击“登录”按钮时,调用 wx.getUserProfile 接口获取用户的头像和昵称等信息,并将其保存到数据库中。如果该用户已经存在于数据库中,则更新其信息。
4. 点击“退出登录”按钮时,将全局变量 app.globalData.userInfo 和本地存储中的 userInfo 变量都设为 null,并将页面的 userInfo 变量也设为 null。
总体来说,这段代码实现了一个小程序中常见的用户登录、退出登录和跳转页面等功能。
相关问题
Page({ data: { inputValue: '', }, onInput(event) { this.setData({ inputValue: event.detail.value, }) }, onSubmit() { const num = parseInt(this.data.inputValue) const newCards = [] for (let i = 1; i <= num; i++) { const id = Date.now() + i const text = '卡片${i}' newCards.push({ id, text }) } const cardList = getApp().globalData.cardList getApp().globalData.cardList = cardList.concat(newCards) wx.navigateBack() }, })
根据你提供的代码,我看不出任何明显的错误。但是,我注意到以下几点:
1. `inputValue` 是一个字符串类型的变量,当你通过 `parseInt()` 方法将其转换为整数时,请确保输入的值确实可以被解析为整数,否则将返回 `NaN`。在这种情况下,你可以添加一个检查来确保输入的值是有效的整数,例如:
```
const num = parseInt(this.data.inputValue)
if (isNaN(num)) {
// 处理无效输入的情况
return;
}
```
2. 在 `for` 循环中,字符串模板表达式中用于插入变量值的语法不正确。应该使用 `${i}` 而不是 `卡片${i}`。例如:
```
const text = `卡片${i}`; // 错误的语法
const text = `卡片${i}`; // 正确的语法
```
3. 在 `onSubmit` 函数中,你将新卡片添加到全局数据对象 `cardList` 中,这可能会导致数据管理方面的问题。相反,你可以将新卡片添加到页面实例的数据对象中,并在返回前将其传递给上一个页面。例如:
```
onSubmit() {
const num = parseInt(this.data.inputValue)
const newCards = []
for (let i = 1; i <= num; i++) {
const id = Date.now() + i
const text = `卡片${i}`
newCards.push({ id, text })
}
this.setData({
newCards: newCards
})
wx.navigateBack()
}
```
然后在上一个页面中,你可以使用 `getCurrentPages()` 方法获取当前页面实例并访问其数据对象中的 `newCards` 属性。
if(this.data.viewFlag === 1){ this.setData({ inviteListData: response.data.content, inviteFlag:true, loading: false, pageTotal: response.data.totalElements, }) }else if(this.data.viewFlag === 2){ this.setData({ unDisposeData: response.data.content, unDisposeFlag:true, loading: false, pageTotal: response.data.totalElements, }) }else if(this.data.viewFlag === 3){ this.setData({ chargeOffListData: response.data.content, writeOffFlag:true, loading: false, pageTotal: response.data.totalElements, }) }else if(this.data.viewFlag === 4){ this.setData({ unChargeOffListData: response.data.content, unverifiedFlag:true, loading: false, pageTotal: response.data.totalElements, }) }帮我优化一下这段代码
你可以使用一个对象来存储相同属性的数据,然后根据不同的条件设置不同的属性值。这样可以减少重复代码,提高代码的可读性和可维护性。下面是优化后的代码示例:
```javascript
const flagMapping = {
1: {
dataName: 'inviteListData',
flagName: 'inviteFlag'
},
2: {
dataName: 'unDisposeData',
flagName: 'unDisposeFlag'
},
3: {
dataName: 'chargeOffListData',
flagName: 'writeOffFlag'
},
4: {
dataName: 'unChargeOffListData',
flagName: 'unverifiedFlag'
}
};
const { dataName, flagName } = flagMapping[this.data.viewFlag];
this.setData({
[dataName]: response.data.content,
[flagName]: true,
loading: false,
pageTotal: response.data.totalElements
});
```
这样,根据 `viewFlag` 的不同取值,就会动态地设置对应的数据和标志位,避免了重复的代码块。