想请教各位前辈一个问题:小程序左右滑动,每滑动一次更新一句句子,我要怎么才能实现每个句子的收藏功能是独立的呢?
我现在的收藏功能是一句话被收藏了,其他全部都被收藏了。
那下面的代码是从网上借鉴的,侵删,但是我只是为了做练习和练手
谢谢各位前辈指点!
这是wxml
<view class="container">
<swiper class="sentence-swiper">
<swiper-item class="word" wx:for="{{weeklyrecommend}}"wx:key="index">
<text class="{{isClick?'iconfont icon-collect-after collect-position':'iconfont icon-collect-before collect-position'}}" catch:tap="haveSave" data-id="{{item.id}}"></text>
<view class="classic-word">
<text>{{item.sentence}}</text>
</view>
</swiper-item>
</swiper>
</view>
然后是js
// pages/collect/collect.js
Page({
data: {
job: [],
jobList: [],
id: '',
isClick: false,
jobStorage: [],
jobId: '',
weeklyrecommend: [
{
id: 0,
sentence: "“为什么讨人喜的女人总是嫁给蠢物?”“因为有脑子的男人是不会娶讨人喜的女人的。”"
},
{
id: 1,
sentence: "只有坚信自己能改变世界的人,她才能改变世界。"
},
{
id: 2,
sentence: "“为什么讨人喜的女人总是嫁给蠢物?”“因为有脑子的男人是不会娶讨人喜的女人的。”"
]
},
haveSave(e) {
console.log(e)
if (!this.data.isClick == true) {
let jobData = this.data.jobStorage;
jobData.push({
jobid: jobData.length,
id: this.data.job.id,
})
console.log(this.data.job.id)
wx.setStorageSync('jobData', jobData);//设置缓存
wx.showToast({
title: '已收藏',
});
} else {
wx.showToast({
title: '已取消收藏',
});
}
this.setData({
isClick: !this.data.isClick
})
}
})
根据id标记点击的句子
小程序好久没写了,大概思路就是:
一个for循环里面是你的每个id,和一句话,在div或者view 里面添加按钮
,获得id或者是序号,我推荐你用index作为序号,因为后面你要取出这句话的时候weeklyrecommend[index]比起你通过
for (var i of weeklyrecommend){
if(i.id=="你获得的id"){
return i.sentence
}
}
要方便。
你其实可以用微信的生命周期来做这件事
微信这个页面加载的时候触发
this.data.jobData = wx.getStorageSync('jobData');//获得你存储在缓存里的值
然后你在点击按钮的时候把index传入haveSave里面,
这时候你可以比较是否有收藏,(推荐你用数组)
比如:
///array添加方法indexOf
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
///array添加方法remove
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
this.data.jobData=[1,2,3];
let jobData=this.data.jobData
if(jobData.indexOf(index)>-1){
//说明数组内有这个值,
jobData.remove(index);
}else{
jobData.push(index);
}
this.data.jobData=jobData;
然后,你摧毁页面的时候就执行wx.setStorageSync('jobData',this.data.jobData)