当前位置: 首页 > 知识库问答 >
问题:

settimeout - Vue Router 在 mounted 中无用户交互 执行 router.push 的无法回退当前页面?

农英杰
2024-01-22

大佬们求助 vue-router在mounted中,没有用户交互情况下,执行router.push ,无法返回当前页面,没有当前页面的历史记录,用户点击跳转就可以

 mounted(){    setTimeout(()=>{      this.$router.push('/my')    },2000)  },

共有3个答案

小牛23001
2024-01-22

我这边是可以的返回的,你得提供一下你的业务代码之类,看看是不是有业务代码影响到了。
比如说在路由守卫中做了处理,重定向到了其他页面,比如说首页,所以你返回的时候会觉得没有效果,但其实是有的。

康文昌
2024-01-22

image.png

我搞了个 demo,无法复现。看控制台的 history 也是正常的。

https://jsfiddle.net/lilnong1/zwhb79vL/6/

艾敏学
2024-01-22

您的问题描述是关于 Vue Router 在 Vue 组件的 mounted 钩子中执行路由跳转,然后无法返回当前页面。

首先,我们需要理解 Vue Router 的工作原理。在 Vue Router 中,当你执行 router.push 或者 router.replace 时,新的路由被添加到历史堆栈中。然后,如果用户点击浏览器的后退按钮,Vue Router 会试图重新进入堆栈中的上一个路由。

然而,你的问题是在 mounted 钩子中执行路由跳转,这可能不会保留当前页面的历史记录。这是因为 mounted 钩子在组件被挂载到 DOM 后立即执行,而此时可能还没有完全创建路由的历史记录。

解决这个问题的一种方法是使用 nextTick 函数来确保在 DOM 更新后执行路由跳转。nextTick 函数可以让你延迟执行代码,直到 Vue 完成下一个 DOM 更新周期。

以下是一个可能的解决方案:

export default {  mounted() {    this.$nextTick(() => {      this.$router.push('/my')    })  }}

在这个例子中,我们使用 this.$nextTick 来确保在 DOM 更新后执行路由跳转。这样,当前页面的历史记录应该会被正确地保留下来,用户应该能够通过点击浏览器的后退按钮返回到当前页面。

然而,请注意,如果你的应用在某些情况下不允许用户回退(例如,在用户完成某些操作后),你可能需要在应用级别处理这种情况,而不仅仅是使用 nextTick。在这种情况下,你可能需要在应用级别禁用浏览器的回退按钮或者在路由变化时清空历史堆栈。

 类似资料:
  • 问题描述: 从客户端节点进入h5的A页面,从A又跳转到了B页面;在B页面侧滑返回到A页面,这时A页面没有刷新

  • 我使用了jQuery方法调用:,因此语法类似于: 问题: 当我单击image按钮时,它会给出以下错误消息:

  • 我使用了jQuery方法调用:,因此语法类似于: 问题: 当我单击图像按钮时,它给出了以下错误消息:

  • 本文向大家介绍js判断当页面无法回退时关闭网页否则就history.go(-1),包括了js判断当页面无法回退时关闭网页否则就history.go(-1)的使用技巧和注意事项,需要的朋友参考一下 在做一个Web项目时遇到一个需求,当页面没有前驱历史记录时(就是当前为新弹出的页面,没法做goback操作即history.go(-1)),点击返回按钮时直接关闭页面,否则就退回到前一页。 遇到的问题就是

  • 我需要选择列表中的最后一项。下面的代码显示了该元素当前不可见的消息。如何解决这个问题? HTML: 列表的屏幕截图。该列表有一个搜索字段,用户可以在其中输入前缀以缩小搜索范围。

  • 所以问题就在这里。我已经创建了一个自定义加载器,它在中间显示一个基本的“加载”文本,背景变暗。HUD显示良好,但尽管将设置为,我仍然可以单击添加了HUD的UI。代码如下: 用法:和 代码出了什么问题?