如何在vue-router上返回/路由回来?

Joh*_*107 43 javascript webpack vue.js vue-router vuejs2

好的,简单地解释一下:

我有3x页面.

  • 第1页(首页)
  • 第2页(菜单)
  • 第3页(关于)

第1页有 -

<router-link  to="/menu">
Run Code Online (Sandbox Code Playgroud)

点击的按钮路由到"/ menu".

目前,第2页(菜单)有一个

<router-link  to="/">
Run Code Online (Sandbox Code Playgroud)

按钮,单击此按钮时,它将恢复到之前的位置"/"Page 1(Home).

但我不想为每个页面创建路由器组件以"返回"到上一页(就好像我有100页这可能是很多工作路由回来).有没有办法用vue-router做到这一点?类似于window.history.back()

很想知道是否有办法这样做,因为我在文档中找不到它.

提前致谢!约翰

小智 137

您可以使用程序化导航.要返回,您可以使用:

router.go(n) 
Run Code Online (Sandbox Code Playgroud)

其中n可以是正数或负数(返回).这与history.back()相同.所以你可以拥有这样的元素:

<a @click="$router.go(-1)">back</a>
Run Code Online (Sandbox Code Playgroud)


小智 23

使用$router.back()直接回去VUE-路由器/路由回程序。或者如果在组件的模板中使用router.back().

  • 它是`$router.back()` (16认同)
  • @aspirinemaga,如果您在组件的模板中使用它,则不是这样,如果是这种情况,您将其传递为“router.back()” (2认同)

小智 22

这对我来说就像一个时钟:

methods: {
 hasHistory () { return window.history.length > 2 }
}
Run Code Online (Sandbox Code Playgroud)

然后,在模板中:

<button 
  type="button"    
  @click="hasHistory() 
    ? $router.go(-1) 
    : $router.push('/')" class="my-5 btn btn-outline-success">&laquo; 
  Back
</button>
Run Code Online (Sandbox Code Playgroud)

  • 如果您来自应用程序外部的另一个网站,您认为可以返回应用程序的上一页,但实际上您会将其留给外部网站。 (5认同)

小智 13

为我工作,简短而实用。(Nuxt.js)

<a @click="$router.back()"></>
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您正在使用,Vuex您可以使用https://github.com/vuejs/vuex-router-sync

只需在您的主文件中初始化它:

import VuexRouterSync from 'vuex-router-sync';
VuexRouterSync.sync(store, router);
Run Code Online (Sandbox Code Playgroud)

每条路线的变化将更新route状态的对象Vuex。您可以接下来创建getterfrom在路由状态中使用对象或仅使用state(更好的是使用 getter,但它是另一个故事 https://vuex.vuejs.org/en/getters.html),所以简而言之就是(内部组件方法/值):

this.$store.state.route.from.fullPath
Run Code Online (Sandbox Code Playgroud)

您也可以将它放在<router-link>组件中:

<router-link :to="{ path: $store.state.route.from.fullPath }"> 
  Back 
</router-link>
Run Code Online (Sandbox Code Playgroud)

因此,当您使用上面的代码时,将动态生成指向先前路径的链接。

  • 这会导致无限循环问题 (4认同)