js配置
Page({
data: {
goodlist: [],
// 赛事是否被收藏过
isCollect: false,
},
onShow: function () {
// 获取赛事详情数据
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
let options = currentPage.options;
let goodid = options.id;
// console.log(goodid)
const db = wx.cloud.database();
db.collection('addlist').where({
_id: goodid, //查询addlist集合中字段_id为goodid的值
})
.get({
success: res => {
this.setData({
goodlist: res.data[0],
isCollect
})
},
fail(err) {
console.log("查询失败", err);
}
})
// 1获取缓存中的赛事收藏数组
let collect = wx.getStorageSync("collect") || [];
// 2判断当前赛事是否被收藏
let isCollect = collect.some(v => v.goodid === this.goodlist._id);
},
// 点击 收藏图标
handleCollect() {
let isCollect = false;
// 获取缓存中的收藏数组
let collect = wx.getStorageSync("collect") || [];
// 判断是否被收藏过
let index = collect.findIndex(v => v.goodid === this.goodlist._id);
// 当index!=-1表示 已经收藏过
if (index !== -1) {
// 能找到 已经收藏过了 在数组中删除该赛事
collect.splice(index, 1);
isCollect = false;
} else {
// 没有收藏过
collect.push(this.goodlist);
isCollect = true;
}
// 把数组存入到缓存中
wx.setStorageSync("collect", collect);
// 修改data中的isCollect
this.setData({
isCollect
})
}
})
我想通过点击收藏将这一页的数据缓存入本地缓存中,但缓存中没有数组
不清除缓存的话,再次编译还会报错
参考GPT和自己的思路:
关于你提出的问题,首先需要了解小程序中关于本地缓存的相关知识。
在小程序中,我们可以使用wx.setStorageSync(key, data)来将数据存储到本地缓存中,而使用wx.getStorageSync(key)可以从本地缓存中获取数据。在你的代码中,使用了wx.getStorageSync("collect")来获取缓存中的赛事收藏数组,然后使用wx.setStorageSync("collect", collect)来将修改过后的数组存入缓存中。但是你在运行程序时发现缓存中没有该数组,这说明你程序存在问题,需要进行调试和修改。
根据你提供的代码,出现错误的原因是在获取缓存中的赛事收藏数组之后,没有将isCollect变量赋值为true或false,而是直接在setData中使用了未定义的变量。因此,应该在获取缓存后立即对isCollect进行赋值,代码应该修改为:
let collect = wx.getStorageSync("collect") || [];
let isCollect = collect.some(v => v.goodid === this.goodlist._id);
this.setData({
goodlist: res.data[0],
isCollect: isCollect
})
此外,页面的onShow函数中应该先获取赛事详情数据,然后再进行缓存相关操作,修改后代码应该为:
onShow: function () {
// 获取赛事详情数据
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
let options = currentPage.options;
let goodid = options.id;
const db = wx.cloud.database();
db.collection('addlist').where({
_id: goodid, //查询addlist集合中字段_id为goodid的值
})
.get({
success: res => {
let collect = wx.getStorageSync("collect") || [];
let isCollect = collect.some(v => v.goodid === this.goodlist._id);
this.setData({
goodlist: res.data[0],
isCollect: isCollect
});
},
fail(err) {
console.log("查询失败", err);
}
})
}
至此,你应该可以成功将数据缓存到本地了。如果还有其他问题,可以进一步描述或提供相关代码,以便更好地解决问题。