导航抽屉

v-navigation-drawer 组件是用户将用来浏览应用程序的组件。 导航抽屉已预先配置为可以在有或没有 vue-router 的情况下使用。 为了显示的目的,一些示例被包装在 v-card 元素中。 在您的应用程序中,通常会将 v-navigation-drawer 直接放置在 v-app 的下面。

如果使用启用了 app 属性的 v-navigation-drawer,则不需要像示例中那样使用 absolute 属性。

用例

导航抽屉主要用于存放指向应用程序页面的链接。 将 null 用作其 v-model 的起始值会将抽屉初始化为在移动设备上关闭,在桌面上打开。 通常使用 nav 属性将抽屉与 v-list 组件配对。

template script


  1. <template>
  2. <v-card
  3. height="400"
  4. width="256"
  5. class="mx-auto"
  6. >
  7. <v-navigation-drawer permanent>
  8. <v-list-item>
  9. <v-list-item-content>
  10. <v-list-item-title class="title">
  11. Application
  12. </v-list-item-title>
  13. <v-list-item-subtitle>
  14. subtext
  15. </v-list-item-subtitle>
  16. </v-list-item-content>
  17. </v-list-item>
  18. <v-divider></v-divider>
  19. <v-list
  20. dense
  21. nav
  22. >
  23. <v-list-item
  24. v-for="item in items"
  25. :key="item.title"
  26. link
  27. >
  28. <v-list-item-icon>
  29. <v-icon>{{ item.icon }}</v-icon>
  30. </v-list-item-icon>
  31. <v-list-item-content>
  32. <v-list-item-title>{{ item.title }}</v-list-item-title>
  33. </v-list-item-content>
  34. </v-list-item>
  35. </v-list>
  36. </v-navigation-drawer>
  37. </v-card>
  38. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. items: [
  6. { title: 'Dashboard', icon: 'mdi-view-dashboard' },
  7. { title: 'Photos', icon: 'mdi-image' },
  8. { title: 'About', icon: 'mdi-help-box' },
  9. ],
  10. right: null,
  11. }
  12. },
  13. }
  14. </script>

Navigation drawers(导航抽屉) - 图1

API

从下面选择您想要的组件,并查看可用的属性、插槽、事件和函数。

Navigation drawers(导航抽屉) - 图2

实战场

template script


  1. <template>
  2. <v-container>
  3. <v-row justify="space-around">
  4. <v-col cols="12">
  5. <v-select
  6. v-model="color"
  7. :items="colors"
  8. label="Color"
  9. ></v-select>
  10. </v-col>
  11. <v-switch
  12. v-model="drawer"
  13. class="ma-2"
  14. label="v-model"
  15. ></v-switch>
  16. <v-switch
  17. v-model="permanent"
  18. class="ma-2"
  19. label="Permanent"
  20. ></v-switch>
  21. <v-switch
  22. v-model="miniVariant"
  23. class="ma-2"
  24. label="Mini variant"
  25. ></v-switch>
  26. <v-switch
  27. v-model="expandOnHover"
  28. class="ma-2"
  29. label="Expand on hover"
  30. ></v-switch>
  31. <v-switch
  32. v-model="background"
  33. class="ma-2"
  34. label="Background"
  35. ></v-switch>
  36. <v-switch
  37. v-model="right"
  38. class="ma-2"
  39. label="Right"
  40. ></v-switch>
  41. </v-row>
  42. <v-card
  43. height="400"
  44. class="overflow-hidden"
  45. >
  46. <v-navigation-drawer
  47. v-model="drawer"
  48. :color="color"
  49. :expand-on-hover="expandOnHover"
  50. :mini-variant="miniVariant"
  51. :right="right"
  52. :permanent="permanent"
  53. :src="bg"
  54. absolute
  55. dark
  56. >
  57. <v-list
  58. dense
  59. nav
  60. class="py-0"
  61. >
  62. <v-list-item two-line :class="miniVariant && 'px-0'">
  63. <v-list-item-avatar>
  64. <img src="https://randomuser.me/api/portraits/men/81.jpg">
  65. </v-list-item-avatar>
  66. <v-list-item-content>
  67. <v-list-item-title>Application</v-list-item-title>
  68. <v-list-item-subtitle>Subtext</v-list-item-subtitle>
  69. </v-list-item-content>
  70. </v-list-item>
  71. <v-divider></v-divider>
  72. <v-list-item
  73. v-for="item in items"
  74. :key="item.title"
  75. link
  76. >
  77. <v-list-item-icon>
  78. <v-icon>{{ item.icon }}</v-icon>
  79. </v-list-item-icon>
  80. <v-list-item-content>
  81. <v-list-item-title>{{ item.title }}</v-list-item-title>
  82. </v-list-item-content>
  83. </v-list-item>
  84. </v-list>
  85. </v-navigation-drawer>
  86. </v-card>
  87. </v-container>
  88. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. drawer: true,
  6. items: [
  7. { title: 'Dashboard', icon: 'mdi-view-dashboard' },
  8. { title: 'Photos', icon: 'mdi-image' },
  9. { title: 'About', icon: 'mdi-help-box' },
  10. ],
  11. color: 'primary',
  12. colors: [
  13. 'primary',
  14. 'blue',
  15. 'success',
  16. 'red',
  17. 'teal',
  18. ],
  19. right: false,
  20. permanent: true,
  21. miniVariant: false,
  22. expandOnHover: false,
  23. background: false,
  24. }
  25. },
  26. computed: {
  27. bg () {
  28. return this.background ? 'https://cdn.vuetifyjs.com/images/backgrounds/bg-2.jpg' : undefined
  29. },
  30. },
  31. }
  32. </script>

Navigation drawers(导航抽屉) - 图3

示例

下面是一些简单到复杂的例子。

彩色的抽屉

导航抽屉可以定制,以适应任何应用程序的设计。这里,我们使用 append 插槽应用自定义背景颜色和附加的内容区域。

template script


  1. <template>
  2. <v-card
  3. class="mx-auto"
  4. height="400"
  5. width="256"
  6. >
  7. <v-navigation-drawer
  8. class="deep-purple accent-4"
  9. dark
  10. permanent
  11. >
  12. <v-list>
  13. <v-list-item
  14. v-for="item in items"
  15. :key="item.title"
  16. link
  17. >
  18. <v-list-item-icon>
  19. <v-icon>{{ item.icon }}</v-icon>
  20. </v-list-item-icon>
  21. <v-list-item-content>
  22. <v-list-item-title>{{ item.title }}</v-list-item-title>
  23. </v-list-item-content>
  24. </v-list-item>
  25. </v-list>
  26. <template v-slot:append>
  27. <div class="pa-2">
  28. <v-btn block>Logout</v-btn>
  29. </div>
  30. </template>
  31. </v-navigation-drawer>
  32. </v-card>
  33. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. items: [
  6. { title: 'Dashboard', icon: 'dashboard' },
  7. { title: 'Account', icon: 'account_box' },
  8. { title: 'Admin', icon: 'gavel' },
  9. ],
  10. }
  11. },
  12. }
  13. </script>

Navigation drawers(导航抽屉) - 图4

永久浮动抽屉

默认情况下,导航抽屉的右边框为 1px,将其与内容分开。 在此示例中,我们要从左侧拆下抽屉,让它自己浮动。 floating 属性删除右边框(如果使用 right,则删除左边框)。

template script


  1. <template>
  2. <v-card
  3. class="pa-12"
  4. color="indigo darken-2"
  5. flat
  6. >
  7. <v-card
  8. elevation="12"
  9. width="256"
  10. >
  11. <v-navigation-drawer
  12. floating
  13. permanent
  14. >
  15. <v-list
  16. dense
  17. rounded
  18. >
  19. <v-list-item
  20. v-for="item in items"
  21. :key="item.title"
  22. link
  23. >
  24. <v-list-item-icon>
  25. <v-icon>{{ item.icon }}</v-icon>
  26. </v-list-item-icon>
  27. <v-list-item-content>
  28. <v-list-item-title>{{ item.title }}</v-list-item-title>
  29. </v-list-item-content>
  30. </v-list-item>
  31. </v-list>
  32. </v-navigation-drawer>
  33. </v-card>
  34. </v-card>
  35. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. items: [
  6. { title: 'Home', icon: 'dashboard' },
  7. { title: 'About', icon: 'question_answer' },
  8. ],
  9. }
  10. },
  11. }
  12. </script>

Navigation drawers(导航抽屉) - 图5

迷你

当使用 mini-variant prop 时,抽屉会缩小(默认 56px),并隐藏 v-list 中除了第一个元素之外的所有内容。在这个例子中,我们使用了 .sync 修改器,它允许我们以程序化的方式绑定抽屉的扩展/收缩。

template script


  1. <template>
  2. <v-card>
  3. <v-navigation-drawer
  4. v-model="drawer"
  5. :mini-variant.sync="mini"
  6. permanent
  7. >
  8. <v-list-item class="px-2">
  9. <v-list-item-avatar>
  10. <v-img src="https://randomuser.me/api/portraits/men/85.jpg"></v-img>
  11. </v-list-item-avatar>
  12. <v-list-item-title>John Leider</v-list-item-title>
  13. <v-btn
  14. icon
  15. @click.stop="mini = !mini"
  16. >
  17. <v-icon>mdi-chevron-left</v-icon>
  18. </v-btn>
  19. </v-list-item>
  20. <v-divider></v-divider>
  21. <v-list dense>
  22. <v-list-item
  23. v-for="item in items"
  24. :key="item.title"
  25. link
  26. >
  27. <v-list-item-icon>
  28. <v-icon>{{ item.icon }}</v-icon>
  29. </v-list-item-icon>
  30. <v-list-item-content>
  31. <v-list-item-title>{{ item.title }}</v-list-item-title>
  32. </v-list-item-content>
  33. </v-list-item>
  34. </v-list>
  35. </v-navigation-drawer>
  36. </v-card>
  37. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. drawer: true,
  6. items: [
  7. { title: 'Home', icon: 'mdi-home-city' },
  8. { title: 'My Account', icon: 'mdi-account' },
  9. { title: 'Users', icon: 'mdi-account-group-outline' },
  10. ],
  11. mini: true,
  12. }
  13. },
  14. }
  15. </script>

Navigation drawers(导航抽屉) - 图6

临时的

临时抽屉位于其应用之上,并使用稀松布(叠加)来使背景变暗。这个抽屉的行为是模仿在移动设备时的持续抽屉。点击抽屉外部会导致关闭。

template script


  1. <template>
  2. <v-sheet
  3. height="400"
  4. class="overflow-hidden"
  5. style="position: relative;"
  6. >
  7. <v-container class="fill-height">
  8. <v-row
  9. align="center"
  10. justify="center"
  11. >
  12. <v-btn
  13. color="pink"
  14. dark
  15. @click.stop="drawer = !drawer"
  16. >
  17. Toggle
  18. </v-btn>
  19. </v-row>
  20. </v-container>
  21. <v-navigation-drawer
  22. v-model="drawer"
  23. absolute
  24. temporary
  25. >
  26. <v-list-item>
  27. <v-list-item-avatar>
  28. <v-img src="https://randomuser.me/api/portraits/men/78.jpg"></v-img>
  29. </v-list-item-avatar>
  30. <v-list-item-content>
  31. <v-list-item-title>John Leider</v-list-item-title>
  32. </v-list-item-content>
  33. </v-list-item>
  34. <v-divider></v-divider>
  35. <v-list dense>
  36. <v-list-item
  37. v-for="item in items"
  38. :key="item.title"
  39. link
  40. >
  41. <v-list-item-icon>
  42. <v-icon>{{ item.icon }}</v-icon>
  43. </v-list-item-icon>
  44. <v-list-item-content>
  45. <v-list-item-title>{{ item.title }}</v-list-item-title>
  46. </v-list-item-content>
  47. </v-list-item>
  48. </v-list>
  49. </v-navigation-drawer>
  50. </v-sheet>
  51. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. drawer: null,
  6. items: [
  7. { title: 'Home', icon: 'dashboard' },
  8. { title: 'About', icon: 'question_answer' },
  9. ],
  10. }
  11. },
  12. }
  13. </script>

Navigation drawers(导航抽屉) - 图7

右侧

导航抽屉也可以位于应用程序(或元素)的右侧。 这对于创建带有辅助信息(可能没有任何导航链接)的侧页很有用。 使用 RTL 时,必须为抽屉明确定义 right

template script


  1. <template>
  2. <v-card height="350px">
  3. <v-navigation-drawer
  4. absolute
  5. permanent
  6. right
  7. >
  8. <template v-slot:prepend>
  9. <v-list-item two-line>
  10. <v-list-item-avatar>
  11. <img src="https://randomuser.me/api/portraits/women/81.jpg">
  12. </v-list-item-avatar>
  13. <v-list-item-content>
  14. <v-list-item-title>Jane Smith</v-list-item-title>
  15. <v-list-item-subtitle>Logged In</v-list-item-subtitle>
  16. </v-list-item-content>
  17. </v-list-item>
  18. </template>
  19. <v-divider></v-divider>
  20. <v-list dense>
  21. <v-list-item
  22. v-for="item in items"
  23. :key="item.title"
  24. @click=""
  25. >
  26. <v-list-item-icon>
  27. <v-icon>{{ item.icon }}</v-icon>
  28. </v-list-item-icon>
  29. <v-list-item-content>
  30. <v-list-item-title>{{ item.title }}</v-list-item-title>
  31. </v-list-item-content>
  32. </v-list-item>
  33. </v-list>
  34. </v-navigation-drawer>
  35. </v-card>
  36. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. items: [
  6. { title: 'Home', icon: 'mdi-home-city' },
  7. { title: 'My Account', icon: 'mdi-account' },
  8. { title: 'Users', icon: 'mdi-account-group-outline' },
  9. ],
  10. }
  11. },
  12. }
  13. </script>

Navigation drawers(导航抽屉) - 图8

Freelancer Free

A Free single page Vuetify theme for new developers.

ads by Vuetify

](https://store.vuetifyjs.com/product/freelancer-theme-free?ref=vuetifyjs.com)

悬停扩展

将组件置于 mini-variant 模式,并在悬停后展开。 不更改内容区域。 宽度可以通过 mini-variant-width 属性进行控制。

template script


  1. <template>
  2. <div class="ma-12 pa-12">
  3. <template>
  4. <v-card>
  5. <v-navigation-drawer
  6. permanent
  7. expand-on-hover
  8. >
  9. <v-list>
  10. <v-list-item class="px-2">
  11. <v-list-item-avatar>
  12. <v-img src="https://randomuser.me/api/portraits/women/85.jpg"></v-img>
  13. </v-list-item-avatar>
  14. </v-list-item>
  15. <v-list-item link>
  16. <v-list-item-content>
  17. <v-list-item-title class="title">Sandra Adams</v-list-item-title>
  18. <v-list-item-subtitle>sandra_a88@gmail.com</v-list-item-subtitle>
  19. </v-list-item-content>
  20. </v-list-item>
  21. </v-list>
  22. <v-divider></v-divider>
  23. <v-list
  24. nav
  25. dense
  26. >
  27. <v-list-item link>
  28. <v-list-item-icon>
  29. <v-icon>mdi-folder</v-icon>
  30. </v-list-item-icon>
  31. <v-list-item-title>My Files</v-list-item-title>
  32. </v-list-item>
  33. <v-list-item link>
  34. <v-list-item-icon>
  35. <v-icon>mdi-account-multiple</v-icon>
  36. </v-list-item-icon>
  37. <v-list-item-title>Shared with me</v-list-item-title>
  38. </v-list-item>
  39. <v-list-item link>
  40. <v-list-item-icon>
  41. <v-icon>mdi-star</v-icon>
  42. </v-list-item-icon>
  43. <v-list-item-title>Starred</v-list-item-title>
  44. </v-list-item>
  45. </v-list>
  46. </v-navigation-drawer>
  47. </v-card>
  48. </template>
  49. </div>
  50. </template>
  1. <script>
  2. export default {
  3. //
  4. }
  5. </script>

Navigation drawers(导航抽屉) - 图9

背景

将自定义背景应用于抽屉。 如果您需要自定义 v-img 的属性,则可以使用 img 插槽。

template script


  1. <template>
  2. <v-card
  3. class="mx-auto"
  4. height="300"
  5. width="300"
  6. >
  7. <v-navigation-drawer
  8. absolute
  9. dark
  10. src="https://cdn.vuetifyjs.com/images/backgrounds/bg-2.jpg"
  11. width="100%"
  12. permanent
  13. >
  14. <v-list>
  15. <v-list-item
  16. v-for="([icon, text], i) in items"
  17. :key="i"
  18. link
  19. >
  20. <v-list-item-icon>
  21. <v-icon>{{ icon }}</v-icon>
  22. </v-list-item-icon>
  23. <v-list-item-content>
  24. <v-list-item-title>{{ text }}</v-list-item-title>
  25. </v-list-item-content>
  26. </v-list-item>
  27. </v-list>
  28. </v-navigation-drawer>
  29. </v-card>
  30. </template>
  1. <script>
  2. export default {
  3. data: () => ({
  4. items: [
  5. ['mdi-email', 'Inbox'],
  6. ['mdi-account-supervisor-circle', 'Supervisors'],
  7. ['mdi-clock-start', 'Clock-in'],
  8. ],
  9. }),
  10. }
  11. </script>

Navigation drawers(导航抽屉) - 图10

组合抽屉

在此示例中,我们定义了一个自定义宽度来容纳我们的嵌套抽屉。 使用 v-row,我们确保抽屉和列表在水平方向上彼此相邻。

template script


  1. <template>
  2. <v-card
  3. class="mx-auto"
  4. height="300"
  5. width="330"
  6. >
  7. <v-navigation-drawer
  8. permanent
  9. width="100%"
  10. >
  11. <v-row class="fill-height" no-gutters>
  12. <v-navigation-drawer
  13. dark
  14. mini-variant
  15. mini-variant-width="56"
  16. permanent
  17. >
  18. <v-list-item class="px-2">
  19. <v-list-item-avatar>
  20. <v-img src="https://randomuser.me/api/portraits/women/75.jpg"></v-img>
  21. </v-list-item-avatar>
  22. </v-list-item>
  23. <v-divider></v-divider>
  24. <v-list
  25. dense
  26. nav
  27. >
  28. <v-list-item
  29. v-for="item in items"
  30. :key="item.title"
  31. @click=""
  32. >
  33. <v-list-item-action>
  34. <v-icon>{{ item.icon }}</v-icon>
  35. </v-list-item-action>
  36. <v-list-item-content>
  37. <v-list-item-title>{{ item.title }}</v-list-item-title>
  38. </v-list-item-content>
  39. </v-list-item>
  40. </v-list>
  41. </v-navigation-drawer>
  42. <v-list class="grow">
  43. <v-list-item
  44. v-for="link in links"
  45. :key="link"
  46. link
  47. >
  48. <v-list-item-title v-text="link"></v-list-item-title>
  49. </v-list-item>
  50. </v-list>
  51. </v-row>
  52. </v-navigation-drawer>
  53. </v-card>
  54. </template>
  1. <script>
  2. export default {
  3. data () {
  4. return {
  5. items: [
  6. { title: 'Home', icon: 'dashboard' },
  7. { title: 'About', icon: 'question_answer' },
  8. ],
  9. links: ['Home', 'Contacts', 'Settings'],
  10. mini: true,
  11. }
  12. },
  13. }
  14. </script>

Navigation drawers(导航抽屉) - 图11

底部抽屉

使用 bottom 属性,我们可以在移动设备上重新定位我们的抽屉,让它从屏幕的底部出来。这是另一种样式,只在遇到 mobile-break-point 时激活。

template script


  1. <template>
  2. <v-card
  3. class="mx-auto overflow-hidden"
  4. height="400"
  5. width="344"
  6. >
  7. <v-system-bar color="deep-purple darken-3"></v-system-bar>
  8. <v-app-bar
  9. color="deep-purple accent-4"
  10. dark
  11. prominent
  12. >
  13. <v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
  14. <v-toolbar-title>My files</v-toolbar-title>
  15. <v-spacer></v-spacer>
  16. <v-btn icon>
  17. <v-icon>mdi-magnify</v-icon>
  18. </v-btn>
  19. <v-btn icon>
  20. <v-icon>mdi-filter</v-icon>
  21. </v-btn>
  22. <v-btn icon>
  23. <v-icon>mdi-dots-vertical</v-icon>
  24. </v-btn>
  25. </v-app-bar>
  26. <v-navigation-drawer
  27. v-model="drawer"
  28. absolute
  29. bottom
  30. temporary
  31. >
  32. <v-list
  33. nav
  34. dense
  35. >
  36. <v-list-item-group
  37. v-model="group"
  38. active-class="deep-purple--text text--accent-4"
  39. >
  40. <v-list-item>
  41. <v-list-item-title>Foo</v-list-item-title>
  42. </v-list-item>
  43. <v-list-item>
  44. <v-list-item-title>Bar</v-list-item-title>
  45. </v-list-item>
  46. <v-list-item>
  47. <v-list-item-title>Fizz</v-list-item-title>
  48. </v-list-item>
  49. <v-list-item>
  50. <v-list-item-title>Buzz</v-list-item-title>
  51. </v-list-item>
  52. </v-list-item-group>
  53. </v-list>
  54. </v-navigation-drawer>
  55. <v-card-text>
  56. The navigation drawer will appear from the bottom on smaller size screens.
  57. </v-card-text>
  58. </v-card>
  59. </template>
  1. <script>
  2. export default {
  3. data: () => ({
  4. drawer: false,
  5. group: null,
  6. }),
  7. watch: {
  8. group () {
  9. this.drawer = false
  10. },
  11. },
  12. }
  13. </script>

Navigation drawers(导航抽屉) - 图12