vue-router 中某些路由的单独导航抽屉

Posted

技术标签:

【中文标题】vue-router 中某些路由的单独导航抽屉【英文标题】:Separate navigation drawers for certain routes in vue-router 【发布时间】:2020-06-10 09:42:58 【问题描述】:

我正在结合 Vuex 和 vue-router 构建一个 Vuetify 应用程序。一些视图使用默认的导航抽屉,但其他视图在其导航抽屉中有不同的项目。 This documentation say 我可以通过 props 来查看组件。所以我是这样实现的:

路由/index.js


  path: '/courses/:courseId/lessons/:lessonId',
  name: 'Course 1',
  components: 
    default: () => import('@/views/ViewLesson.vue'),
    sidebar: () => import('@/components/CourseNavBar/CourseNavBar.vue')
  ,
  props: 
    items: [
       text: "Link 1", href:"/link1" ,
       text: "Link 2", href:"/link2" 
    ]
  

src/App.vue

<template>
  <v-app>
    <v-app-bar
      app
      color="primary"
      dark
    >
    <h1>My Project</h1>
    </v-app-bar>
    <v-navigation-drawer><router-view :items="items" name="sidebar"/></v-navigation-drawer>
    <v-content>
      <router-view />
    </v-content>
  </v-app>
</template>

但显然,

src/components/CourseNavBar.vue

<template>
  <!-- <v-navigation-drawer :value="1"> -->
    <v-list dense>
      <navbar-item v-for="(item, i) in items" :key="i" :item="item" >
         item.text 
      </navbar-item>
    </v-list>
  <!-- </v-navigation-drawer> -->
</template>

<script>
import NavBarItem from './NavBarItem.vue'
export default 
  props: 
    items: Array
  ,
  components: 
    'navbar-item': NavBarItem
  

</script>

&lt;CourseNavBar&gt; 的道具仍然未定义。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

有几个问题...

= 替换为:...

 items: [
     text:"Link 1", href:"/link1" ,
     text:"Link 2", href:"/link2" 
  ]

并且sidebar 组件(不是路由器视图)应该在navigation-drawer 的插槽中...

<v-navigation-drawer><sidebar :items="items"></sidebar></v-navigation-drawer>

演示:https://codeply.com/p/oNInfpTwvK

【讨论】:

【参考方案2】:

在你的 routes\index.js 您需要为每个命名视图定义 props 选项:


  path: '/courses/:courseId/lessons/:lessonId',
  name: 'Course 1',
  components: 
    default: () => import('@/views/ViewLesson.vue'),
    sidebar: () => import('@/components/CourseNavBar/CourseNavBar.vue')
  ,
  props: 
    default: true,
    sidebar: true,
    items: [
       text: "Link 1", href: "/link1" ,
       text: "Link 2", href: "/link2" 
    ]
  

根据@Zim 所说,在将 href 值分配给 props items 数组时,您使用了“=”而不是“:”。

您可以使用&lt;router-view name="sidebar"/&gt; 来输出命名的组件。

【讨论】:

我遵循了你的榜样。不幸的是,使用 Vue 工具检查时,items 仍然未定义。 @starleaf1 这个例子有帮助吗? codesandbox.io/s/awesome-tesla-6z14m

以上是关于vue-router 中某些路由的单独导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章

使用Vue-Router 2实现路由功能

vue-router --- 路由守卫类型

前端开发简说Vue-router路由

路由vue-router进阶

vue-router 实现导航守卫(路由卫士)

如何使 BeforeRouteEnter 中的 next(false) 阻止 Vue-Router 导航到路由?