ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Vue 中获取当前路由的名称?

我想获取 vue-router 当前路由的名称,我有一个组件菜单可以导航到另一个组件,所以我想显示当前路由的名称。我有这个:

created(){
    this.currentRoute;
    //this.nombreRuta = this.$route.name;
},
computed:{
    currentRoute:{
        get(){
            this.nombreRuta = this.$route.name;
        }
    }
}

但是路由名称的标签并没有改变,标签只显示第一个加载的路由的名称。谢谢你

编辑:

https://i.stack.imgur.com/7hNhn.png

显示我想要的图像

您是否尝试在浏览器地址栏中手动输入路线的 url?
@bgsuello 一切正常,只是我想在我的导航菜单组件标题中显示当前路线名称的模板中的标签
您的 getter 应返回 this.$route.name
计算可能不是执行此操作的地方,请尝试运行一个在mounted() 挂钩中设置this.$route.name 的方法
或者尝试在路由文件的 beforeEach 挂钩中执行此操作,请参阅:stackoverflow.com/questions/49685780/…

t
tony19

您未正确使用 computed。您应该在函数中返回属性。有关详细信息,请参阅 docs

这是您改编的示例:

computed: {
    currentRouteName() {
        return this.$route.name;
    }
}

然后你可以像这样使用它:

<div>{{ currentRouteName }}</div>

您也可以直接在模板中使用它而不使用计算属性,如下所示:

<div>{{ $route.name }}</div>

@ali6p 我想,你的意思是 $router.currentRoute (最后有一个额外的 r)。此命令返回 $route 对象。另请参阅 router.vuejs.org/api/#router-currentrouterouter.vuejs.org/api/#the-route-object
嗯你是对的。我使用 $router.currentRoute.name 但我没有写 r :) 谢谢。所以你怎么看?我在 main.js 中定义路由器并使用 $router.currentRoute.name。只有 .name 不起作用。
如果您的模板没有使用上述计算变量进行更新,则问题可能出在其他地方。您确定,您实际上是在更新路线吗?您可能想在 StackOverflow 上提出一个新问题并将其链接到此处。
这个例子总是返回“null”,为什么?
在这个时间点,正确的答案可能是 this.$route.path。试试 console.log(this.$route) 看看是否还有其他您想要的。
S
Shiva127

Vue 3 + Vue 路由器 4

2021 年 5 月 3 日更新

如果您使用的是 Vue 3Vue Router 4,以下是在 setup 挂钩中获取当前路由名称的两种最简单的方法:

解决方案 1:使用 useRoute

import { useRoute } from 'vue-router';
export default {
  setup () {
    const currentRoute = computed(() => {
      return useRoute().name
    })
    return { currentRoute }
  }
}

解决方案 2:使用 useRouter

import { useRouter } from 'vue-router';
export default {
  setup () {
    const currentRoute = computed(() => {
      return useRouter().currentRoute.value.name;
    })
    return {currentRoute}
  }
}

我没有使用 setup(),而是在模板中使用了 computed: { route: () => useRoute() },然后使用了 {{ route.name }}
Y
Yurifull

我用这个...

this.$router.history.current.path

感谢您的贡献。您能解释一下为什么它可以解决 OP 的问题吗?你为什么“使用这个”?解释有助于未来的用户,增加长期价值,质量更高,更有可能被点赞。考虑编辑以添加更多上下文。
这有效,但仅在 Vue 2 中有效。从 Vue 3 开始,从 $router 访问当前路由是 .currentRoute.value.path,如上所述
A
Anirudh

在 Composition API 中,这有效

import { useRouter } from 'vue-router'

const router = useRouter()

let currentPathObject = router.currentRoute.value; 
 
console.log("Route Object", currentPathObject)

// Pick the values you need from the object

这绝对是使用带有 Composition API 的 VUEJS 3。
u
ux.engineer

这就是您如何在 TypeScript 中使用带有 Vue 2 的 @vue/composition-api访问和观察当前路线的名称

<script lang="ts">
import { defineComponent, watch } from '@vue/composition-api';

export default defineComponent({
  name: 'MyCoolComponent',
  setup(_, { root }) {
    console.debug('current route name', root.$route.name);

    watch(() => root.$route.name, () => {
      console.debug(`MyCoolComponent- watch root.$route.name changed to ${root.$route.name}`);
    });
  },
});
</script>

一旦 Vue 3.0 和 Router 4.0 发布,我将更新这个答案!


对于如此简单的事情,这是很多代码!
t
tranmani

我用这个...

this.$route.name

D
Dharman

我用过这样的东西:

import { useRoute } from 'vue-router';

然后宣布

const route = useRoute();

最后,如果您记录 route 对象 - 您将获得我为目标使用路径的所有属性。


S
Saddan

在我的 Laravel 应用程序中,我创建了一个 router.js 文件,我可以访问任何 vue 组件中的路由器对象,例如 this.$route

我通常会得到像 this.$route.path 这样的路线


I
Illuminati

this.$router.currentRoute.value.name;

就像这样工作。$route.name。


S
Skoua

使用带有 Composition API 的 Vue 3 和 Vue Router 4 并计算:

<script setup>
    import { computed } from 'vue'
    import { useRouter } from 'vue-router'

    // computed
    const currentRoute = computed(() => {
        const router = useRouter()
        return router.currentRoute.value.name
    })
</script>

<template>
    <div>{{ currentRoute }}</div>
</template>

⚠ 如果您没有在路由器中设置名称,则不会显示名称:

const routes = [
    { path: '/step1', name: 'Step1', component: Step1 },
    { path: '/step2', name: 'Step2', component: Step2 },
];