上代码
//详情页
setTimeout(() => {
let pages = getCurrentPages();
let prevPage = pages[ pages.length - 2 ]; //上一页页面实例
prevPage.$vm.cid = state.chooseIds;
uni.navigateBack({
delta: 1
});
}, 2000)
下面
//列表页
onShow(() => {
const {
cid,
list,
common
} = state
if (cid != undefined && cid > 0) {
list.map(v => {
if (v.id == cid) {
v.recruit_status = 4
v.reservation_text = getOptionsText(common?.reserveStatusOption || {}, 4)
return v;
}
})
}
})
const getOptionsText = (options, key) => {
let arr = options.filter(v => v.key == key)
if (arr && arr.length > 0) {
return arr[0].text
}
return '-'
})
大家看代码可能不清楚我的感受,这个东西折磨了我大半个下午,下午三点到晚上七点多
具体情况是这个样子的
- 招募列表页 跳转详情页 更改状态
- 招募详情页 点击改变状态 返回招募列表页
原本以为是一个挺简单的功能,就是返回的时候重新刷新一下招募列表页,就可以了,调用一下招募页加载接口,结果试了很多次,还是不可以
然后觉得是没有刷新详情页,所以招募列表页没有检测到,结果反而报错了(自己太菜了)
换了第二条路 传值
就是把招募详情页的状态传给招募列表页
我用的是$emit(写在调用接口的setTimeout里面) $on接收(在onMouted里面)
然后接收到了,就是不改变
于是去求助,知道了有这个方法
let pages = getCurrentPages();
let prevPage = pages[ pages.length - 2 ]; //上一页页面实例
prevPage.$vm.cid = state.chooseIds;
但是第一次看到这个,不知道了这个怎么用,单独知道了这个可以传id过去
自己又摸索了很久,还是没有头绪,换回第二种方法,还是不可以
最后自己继续问,然后直接帮忙解决了 就上上面的代码,我们来仔细看一下
onShow(() => { //它是一个事件处理程序函数,当页面被展示时会触发
const {
cid,
list,
common
} = state
if (cid != undefined && cid > 0) {
list.map(v => {
if (v.id == cid) {
v.recruit_status = 4
v.reservation_text = getOptionsText(common?.reserveStatusOption || {}, 4)
return v;
}
//从状态对象state中提取了三个属性:cid、list、common。
// 然后,如果cid不是未定义的且大于0,我们遍历列表list中的每个元素v,
// 如果元素v的id等于cid,我们将其recruit_status设置为4,
// 将其reservation_text设置为getOptionsText函数返回的文本。
})
}
})
const getOptionsText = (options, key) => { //帮助函数,用于根据给定的选项和键返回对应的文本。
let arr = options.filter(v => v.key == key)
if (arr && arr.length > 0) {
return arr[0].text
}
return '-'
//函数接受两个参数:options和key,
//其中options是一个对象数组,每个对象包含一个键和一个文本。
//我们使用filter函数来找到具有给定键的对象,
//如果找到了,则返回该对象的文本,否则返回'-'。
})
下一次再碰到直接嘎嘎乱写!
(PS彩蛋:好心酸,这个测试的时候要自己去添加数据,就会自己去招募,招募的选项特别多,还要等加载,一分钟左右一条,很麻烦,然后测了失败了,又得继续去重新添加(后面直接狠心自己一次性忍住,添加很多条去测测试自己写的怎么样,结果测完了还没得结果),每次写代码测试都要有成本的,呜呜呜)