Vue.js - NavigationDuplicated 与新路径

Posted

技术标签:

【中文标题】Vue.js - NavigationDuplicated 与新路径【英文标题】:Vue.js - NavigationDuplicated with new path 【发布时间】:2020-12-05 19:56:43 【问题描述】:

我需要关于 Vue.jsNavigationDuplicated 错误的帮助。我正在开发一个允许用户在不同页面之间导航的网络应用程序。

即使我没有推送同一个网页,我也会收到“NavigationDuplicated”错误。具体来说,我得到的错误是:

消息:“不允许导航到当前位置(“/faq/new”)”,名称:“NavigationDuplicated”,...

我的路由器代码如下:

import Vue from "vue";
import VueRouter from "vue-router";

import HomeView from "../views/HomeView.vue";
import KBView from "../views/KBView.vue";
import FaqDetailView from "../views/FaqDetailView.vue";
import NewFaqView from "../views/NewFaqView.vue";

Vue.use(VueRouter);

const routes = [
  
    path: "/",
    name: "Home",
    component: HomeView
  ,
  
    path: "/kb",
    name: "Knowledge Base",
    component: KBView
  ,
  
    path: "/faq/:id",
    name: "Faq details",
    component: FaqDetailView
  ,
  
    path: "/faq/new",
    name: "New faq",
    component: NewFaqView
  
];

const router = new VueRouter(
  routes
);

export default router;

在每个视图中,都有一个按钮可以重定向到另一个视图。例如,一旦单击按钮,就会执行以下代码:

this.$router.push( name: "Knowledge Base" );
this.$router.push( name: "New faq" )

例如,我收到以下路线历史记录的错误:

    localhost:8080/#/kb localhost:8080/#/faq/new localhost:8080/#/kb localhost:8080/#/faq/new ---> 这里出现 NavigationDuplicated 错误

在这张图片中,你可以看到 Vue 扩展为 Chrome 注册的路由历史:Routes history

您能帮我理解为什么会出现“NavigationDuplicated”错误吗?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这里有first和second的解释和解决方案,也可以查看here和here。

基本上只是捕捉并忽略该消息。

【讨论】:

感谢您的回答。我阅读了链接,但他们没有回答我的问题。如果您仔细阅读我的路线历史记录,您会发现我在从 .../kb 路由到 .../faq/new 时得到“NavigationDuplucated”。另外,我希望找到解决方法而不是忽略错误。 @NicolaMassarenti 您使用的是哪个版本的 vue-router? 我无法重现您的错误,因此 vue-router check 的主要贡献者都没有抱怨过这个问题以及像您这样的意外导航错误,目前处理此错误的唯一方法是捕获它changePage() this.$router.push( name: "f n" ).catch((error) => //log error); , 您也可以参考this,作为基于Promise的路由器,您可以等待答案,同样在同一个线程中,您可以找到全局处理导航错误的方法,但有时它们也有自己的缺点 还有一点注意,最好在路由中添加这样的组件: path: '/page', name: 'page', component: () => import(/* webpackChunkName: name_that_displayed_when_component_loaded */ "path/to/Component.vue") , 所以只有当用户点击链接时才会导入这个组件

以上是关于Vue.js - NavigationDuplicated 与新路径的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 和 Vue.js,为啥 Refresh 让 vue.js 的 store 清晰?我如何在 vue.js 中使用上传的图片?

Vue.js

Vue自学笔记(1)引入vue.js步骤

Vue.JS - 如何在 Vue.JS 中使用 localStorage

Vue.js实战:初识Vue.js

Vue.js高效前端开发知识 • 目录