Vue.js 在构建站点全局导航时,.route.params在app.vue中为空(路由器视图之外)
我有vue设置并且工作正常,我可以路由到页面,并且它们在router view组件中正确显示。我可以在页面内的组件中访问此.route.params.xyz,但是,当尝试在组件(如全局导航)中访问时,params集合为空 当前路由URL是localhost:5011/forum/2/details,其中2是一个id值。我可以通过一些本地路由访问页面上的2,但我希望全局菜单上有一个设置页面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
{
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路由器,则任何操作都无效。我不知道你为什么看不到你挂在钩子上的情妇。