需求描述:
A页面有一个按钮,点击后进入B页面。B页面有一个延时弹窗,等到延时结束后,弹出一个弹窗,弹窗点击确认后返回A页面。这个需求已经完成,问题是用户不一定会等到延时结束,可能会提前退回A页面。
这个时候A页面就会出现B页面的延时弹窗。为了清除这个弹窗,就再B页面假如清除计时器
beforeDestroy。结果一下午A页面还是弹出弹窗,一直排除代码问题。
最后发现是用户自行返回A页面时。beforeDestroy不执行
折腾一下午找不到原因,索性重新部署,发现执行了????
对比环境,最后发现是配置文件的问题
{
"pages": [
{
"path": "pages/index",
"style": {
}
},
{
"path": "pages/ceshi",
"style": {
}
},{
"path": "pages/ceshi2",
"style": {
}
}
],
}
把pages/index取消了,ceshi2页面里面的beforeDestroy就能执行。不然就不会执行。蒙蔽了,求大神给个解释。
ceshi代码如下:
<template>
<view class='anniu' @click="navigateToinject()">
<text class=''>
跳转B页面
</text>
</view>
</template>
<script>
export default {
components: {},
data() {
return {
};
},
methods: {
navigateToinject() {
this.$router.push({
path: '/pages/ceshi2',
});
}
},
}
</script>
<style>
.anniu{
width: 100%;
height: 10vh;
background-color: bisque;
}
</style>
ceshi2代码如下:
<template>
<view>
等待3s
</view>
</template>
<script>
export default {
components: {},
data() {
return {
timer: null, // 用于存储 setTimeout 的返回值
};
},
methods: {
//设置弹窗
showModal() {
uni.showModal({
title: '提示',
content: '返回上一页',
showCancel: false, //取消“取消按钮”
success: (res) => { //
const prevPageUrl = '/pages/ceshi';
console.log(prevPageUrl)
uni.reLaunch({
url: prevPageUrl,
});
}
});
}
},
mounted() {
this.timer = setTimeout(() => {
this.showModal();
}, 3000);
},
beforeDestroy() {
clearTimeout(this.timer); // 清除定时器
console.log('运行了这里')
},
}
</script>
<style>
</style>
index代码如下(几乎没有内容):
<template>
</template>
<script>
</script>
<style>
</style>
0 个回复