【问题标题】:How do I get current route in onMounted on page refresh?如何在页面刷新时获取 onMounted 中的当前路线?
【发布时间】:2022-01-05 14:09:32
【问题描述】:

重新加载页面时,我想获取当前路线。可悲的是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


    【解决方案1】:

    出现这种情况是因为当您刷新页面时路由器尚未完全解析初始导航,因此route 最初指的是onMounted 中的默认值 (/)。

    Vue 路由器的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)
        })
      },
    }
    

    demo

    【讨论】:

      【解决方案2】:

      尝试使用可组合函数 useRoute :

      import {
         useRoute
      } from 'vue-router'
      import {
         computed
      } from 'vue'
      
      
      setup() {
         const route = useRoute();
      
         const path = computed(() => route.path)
      }
      

      【讨论】:

      • 很遗憾没有得到我想要的结果,当我刷新或转到 localhost:8080/team 时,计算值仍然给我 '/' 作为路径
      猜你喜欢
      • 2022-11-29
      • 2018-03-18
      • 2017-09-26
      • 1970-01-01
      • 2015-12-01
      • 2021-04-12
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多