这是因为 setTimeout() 函数是在浏览器端运行的,而路由跳转是在前端框架内部进行的,两者并没有直接的联系。

如果要在路由跳转时清除 setTimeout() 定时器,可以在路由组件中通过钩子函数 beforeRouteLeave() 来清除定时器。

具体实现方法如下:

  1. 在路由组件中定义一个定时器变量 timer,用来保存 setTimeout() 返回的定时器 ID。

  2. 在组件的 created() 钩子函数中,使用 setTimeout() 函数创建一个定时器并将其 ID 保存在 timer 变量中。

  3. 在组件的 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() 函数来清除定时器。这样,在路由跳转时就可以保证定时器被正确清除了。

Nuxt 路由跳转清除 setTimeout() 定时器

原文地址: https://www.cveoy.top/t/topic/mkX0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录