Vue.js 在构建站点全局导航时,.route.params在app.vue中为空(路由器视图之外)

Vue.js 在构建站点全局导航时,.route.params在app.vue中为空(路由器视图之外),vue.js,vue-router,Vue.js,Vue Router,我有vue设置并且工作正常,我可以路由到页面,并且它们在router view组件中正确显示。我可以在页面内的组件中访问此.route.params.xyz,但是,当尝试在组件(如全局导航)中访问时,params集合为空 当前路由URL是localhost:5011/forum/2/details,其中2是一个id值。我可以通过一些本地路由访问页面上的2,但我希望全局菜单上有一个设置页面 { title: 'Forum Settings ', icon: 'mdi-cogs', te

我有vue设置并且工作正常,我可以路由到页面,并且它们在router view组件中正确显示。我可以在页面内的组件中访问此.route.params.xyz,但是,当尝试在组件(如全局导航)中访问时,params集合为空

当前路由URL是localhost:5011/forum/2/details,其中2是一个id值。我可以通过一些本地路由访问页面上的2,但我希望全局菜单上有一个设置页面

{
  title: 'Forum Settings ',
  icon: 'mdi-cogs',
  text: 'Forum Settings ' + this.$route.params.id,
  route: {
    name: 'ForumSettings',
    params: {
      id: this.$route.params.id
    },
  },
},
但是,params是{},id是未定义的

我怎样才能做到这一点

route.js:

{
    path: '/forum/:id/settings',
    name: 'ForumSettings',
    component: ForumSettings,
    meta: {
        authorize: true,
    },
},
在页面本身上作为测试:

<dr-btn
    text="Settings"
    :to="{ name: 'ForumSettings', params: {id: this.$route.params.id}}"
>
    <v-icon>mdi-cog</v-icon>
</dr-btn>


这不是当前的URL,因此似乎路由器在这一点上没有设置。如何获取当前路线的论坛id(如果在另一个页面上,设置链接将被隐藏,因此如果实际上没有id,则没有菜单项)

您可以使用vuex商店。让需要设置的页面将id参数传递给vuex变量,让导航使用读取该vuex变量的计算属性。如果你还有很多事情要做,你也可以考虑一个库,它将VUE路由器与VUEX同步。

< P>你可以使用VUEX商店。让需要设置的页面将id参数传递给vuex变量,让导航使用读取该vuex变量的计算属性。如果你还有很多事情要做,你也可以考虑一个库,它将VUE路由器与VUEX同步。

< P>我也有同样的问题。我通过将逻辑移到导航卫士()解决了这个问题

例如:

const routes = [
{
path: '/',
name: 'Home',
beforeEnter:async() => {
  let loggedIn = await store.checkIfLoggedIn()
  if (loggedIn) router.push({name:'Dashboard'})
  return true
},
component: () => import('../views/Home.vue')
},
{
path: '/dashboard',
name: 'Dashboard',
beforeEnter:async() => {
  let loggedIn = await store.checkIfLoggedIn()
  if (!loggedIn) {
    router.push({name:'Home'})
  }
  return true
}]

我也有同样的问题。我通过将逻辑移到导航卫士()解决了这个问题

例如:

const routes = [
{
path: '/',
name: 'Home',
beforeEnter:async() => {
  let loggedIn = await store.checkIfLoggedIn()
  if (loggedIn) router.push({name:'Dashboard'})
  return true
},
component: () => import('../views/Home.vue')
},
{
path: '/dashboard',
name: 'Dashboard',
beforeEnter:async() => {
  let loggedIn = await store.checkIfLoggedIn()
  if (!loggedIn) {
    router.push({name:'Home'})
  }
  return true
}]

那么,路由器在这一点上没有设置?我在想,主菜单,可能应该由应用程序的状态驱动,而不是动态路由。不是所有路由都由vue路由器处理,主导航是路由器视图之外的唯一内容吗?是的,因此如果URL中的ID为5,比如说,这是路由,我无法从view router组件之外的组件中拾取它。主导航是站点结构的一部分,位于view router组件之外。它在view router组件中显示了正确的内容,只是当从主导航访问它时,参数似乎是空的。我刚刚为自己和控制台设置了一个测试场景。log(这个$route)在主应用程序挂载的钩子中对我有效。如果我删除Vue,它将停止工作。使用(VueRouter)您是否错过了告诉Vue使用导入的Vue路由器常量的过程?抱歉,请忘记最后一条评论,如果Vue没有被告知使用Vue路由器,则任何操作都无效。我不知道你为什么在挂载的钩子里看不到参数。所以,路由器在这一点上没有设置?我在想,主菜单,可能应该由应用程序的状态驱动,而不是动态路由。不是所有路由都由vue路由器处理,主导航是路由器视图之外的唯一内容吗?是的,因此如果URL中的ID为5,比如说,这是路由,我无法从view router组件之外的组件中拾取它。主导航是站点结构的一部分,位于view router组件之外。它在view router组件中显示了正确的内容,只是当从主导航访问它时,参数似乎是空的。我刚刚为自己和控制台设置了一个测试场景。log(这个$route)在主应用程序挂载的钩子中对我有效。如果我删除Vue,它将停止工作。使用(VueRouter)您是否错过了告诉Vue使用导入的Vue路由器常量的过程?抱歉,请忘记最后一条评论,如果Vue没有被告知使用Vue路由器,则任何操作都无效。我不知道你为什么看不到你挂在钩子上的情妇。