页面刷新时如何在 onMounted 中获取当前路由?

问题描述 投票:0回答:2

重新加载页面时,我想获取当前路线。可悲的是

route.name
undefined
router.currentRoute
RefImpl
对象,其内部有
'/team'
且具有正确的路线。
router.currentRoute.value
只是根
'/'
,而不是预期的
'/team'
。是否可以从
RefImpl
获得正确的值?

import { useRouter, useRoute } from 'vue-router'

export default {
  name: 'Canvas',
  components: { Ring2, Map },
  setup() {
    const router = useRouter()
    const route = useRoute()

    onMounted(() => {

      console.log(route.name) //undefined
      console.log(router.currentRoute) //RefImpl with correct value ('/team')
      console.log(router.currentRoute.value) // route is '/'
      const rawObject = {...router.currentRoute}
      console.log(rawObject) // value is '/'
      ...

路由器设置如下:

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/team',
    name: 'Team',
    component: () => import('../views/Team.vue')
  },
   ...
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router
javascript vue.js vue-router vuejs3 vue-composition-api
2个回答
18
投票

发生这种情况是因为刷新页面时路由器尚未完全解析初始导航,因此

route
指的是
/
中最初的默认值 (
onMounted
)。

Vue Router 的

isReady()
返回一个
Promise
,当路由器完成初始导航时解析,因此你的
onMounted
钩子可以在尝试读取
await
之前
Promise
route.path
:

import { useRoute, useRouter } from 'vue-router'
import { onMounted } from 'vue'

export default {
  setup() {
    const route = useRoute()
    const router = useRouter()

    onMounted(async () => {
      await router.isReady() 👈
      console.log('route.path', route.path)
    })
  },
}

演示


0
投票

尝试使用可组合函数 useRoute :

import {
   useRoute
} from 'vue-router'
import {
   computed
} from 'vue'


setup() {
   const route = useRoute();

   const path = computed(() => route.path)
}
© www.soinside.com 2019 - 2024. All rights reserved.