【问题标题】:Vuetify router not working when called from JavaScript?从 JavaScript 调用时,Vuetify 路由器不起作用?
【发布时间】:2020-07-28 17:42:04
【问题描述】:

我正在尝试从 Vuetify 中的方法导航路由器,但是当在 go() 函数上放置 /path 时,整个页面只是刷新,并且无处导航。

作品:

<v-btn router to="/somepage">Goto page</v-btn>

不起作用(页面只是刷新):

this.$router.go('/somepage')

作品(历史倒退一步):

this.$router.go(-1)

在 Chrome 控制台中浏览 $router 对象,看起来还不错。我做错了什么?

【问题讨论】:

  • 在您的路由器设置中,您是否曾将“/somepage”路径添加到路由器?如果您不确定这是否意味着,请查看this
  • 是的,v-btn 在相同的路径下工作得很好。另外,我添加了一个“*”路径,以防我输错任何路径。
  • 您要导航到的组件是什么?
  • 我尝试将路径添加到我拥有的许多页面,但它们都不起作用。它们都是 Vuetify 视图组件。整个应用程序运行良好,大量页面通过标记专门使用路由器导航。我以前不需要使用 JavaScript 调用。为了调试,我尝试从代码的许多不同区域(不同的视图、组件等)使用 JavaScript 调用,但同样的事情发生了,它不会路由并且页面只是刷新。
  • 好的,作为一个健全性检查/通常来说,路由器设置的一部分将涉及定义路由,其中​​导航的路径和组件被传递到 Vue Router 对象,然后注入到整个通常是 Vue 实例。如果您从未定义过这一点,那么您的道路将落空并落在您拥有的喧嚣上。这通常在索引页面中,可以部分解释您当前的行为。我会检查路由器设置并查看显式映射了哪些路径,以查看有效的页面是否映射到那里,反之亦然。

标签: vue.js vuetify.js router


【解决方案1】:

Vue路由器提供several functions for programmatic navigation

this.$router.go(n)

go(n) 函数预计nnumber,并且是历史中前进或后退的步数。我认为这就是您没有得到预期结果的原因。

this.$router.push(path|route)

如果您想提供函数的实际路径,您应该使用push() 而不是go()。例如,要转到“主页”页面,您可以使用 this.$router.push('/') 或转到个人资料页面 this.$router.push('/profile')。重要的是,当您使用push() 时,您提交的路径会被添加到历史堆栈中。

this.$router.replace(path|route)

如果您不想向历史堆栈添加条目,则应使用replace() 而不是push()。否则,replace() 的用法与push() 相同,即this.$router.replace('/')this.$router.replace('/profile')

使用path 与使用route 对象

使用push(path|route)replace(path|route) 导航时,您可以选择使用path,它只是一个字符串,即您想去的地方的URL,或者使用route 对象。 route object 为您提供了更多控制权,并允许您将路由或查询参数发送到目标组件。

例如,如果您想导航到具有id3 的用户的个人资料页面,您可以执行this.$router.push({ path: '/profile', params: { id: 3 } }) 之类的操作。或者,如果您使用的是named route,您可以将路径名称替换为路径,即this.$router.push({ name: 'profile', params: { id: 3 } })name 应与分配给路由的名称相对应,无论您在何处设置了主 Router 实例。

使用 Vuetify 的 v-btn 组件

如果您使用的是Vuetify button component,则没有router 属性。相反,您只需指定 to 属性,Vuetify 会自动将其解释为 router-link,例如&lt;v-btn to="/profile"&gt;My Profile&lt;/v-btn&gt;。或者,您可以使用 route 对象,例如&lt;v-btn :to="{ path: '/profile', params: { id: 3 } }"&gt;Profile&lt;/v-btn&gt;。重要的是,请注意第二种情况下 to 前面的冒号 (:)。这告诉 Vue 将属性值解释为 JavaScript 而不是纯文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2015-11-25
    • 2018-08-15
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多