Nuxt 路由跳转清除 setTimeout() 定时器
这是因为 setTimeout() 函数是在浏览器端运行的,而路由跳转是在前端框架内部进行的,两者并没有直接的联系。
如果要在路由跳转时清除 setTimeout() 定时器,可以在路由组件中通过钩子函数 beforeRouteLeave() 来清除定时器。
具体实现方法如下:
-
在路由组件中定义一个定时器变量 timer,用来保存 setTimeout() 返回的定时器 ID。
-
在组件的 created() 钩子函数中,使用 setTimeout() 函数创建一个定时器并将其 ID 保存在 timer 变量中。
-
在组件的 beforeRouteLeave() 钩子函数中,使用 clearTimeout() 函数清除定时器。
下面是一个示例代码:
<template>
<div>
<p>当前时间: {{ currentTime }}</p>
<button @click="stopTimer">停止计时</button>
</div>
</template>
<script>
export default {
data() {
return {
currentTime: '',
timer: null
}
},
created() {
this.timer = setTimeout(() => {
this.currentTime = new Date().toLocaleTimeString()
}, 1000)
},
methods: {
stopTimer() {
clearTimeout(this.timer)
}
},
beforeRouteLeave(to, from, next) {
clearTimeout(this.timer)
next()
}
}
</script>
在上面的代码中,我们在组件的 created() 钩子函数中创建了一个定时器,并将其 ID 保存在 timer 变量中。在 stopTimer() 方法中,我们可以通过 clearTimeout() 函数来清除定时器。在 beforeRouteLeave() 钩子函数中,我们也使用 clearTimeout() 函数来清除定时器。这样,在路由跳转时就可以保证定时器被正确清除了。
原文地址: https://www.cveoy.top/t/topic/mkX0 著作权归作者所有。请勿转载和采集!