当前位置:首页 > VUE

vue实现侧边导航

2026-03-08 20:45:10VUE

Vue 实现侧边导航

在 Vue 中实现侧边导航可以通过多种方式完成,以下是一个常见的实现方法,结合 Vue Router 和动态菜单组件。

创建侧边导航组件

新建一个 Sidebar.vue 组件,用于渲染导航菜单:

<template>
  <div class="sidebar">
    <ul>
      <li v-for="item in menuItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { path: '/home', name: '首页' },
        { path: '/about', name: '关于' },
        { path: '/contact', name: '联系我们' }
      ]
    }
  }
}
</script>

<style scoped>
.sidebar {
  width: 200px;
  background-color: #f4f4f4;
  padding: 20px;
}
.sidebar ul {
  list-style: none;
  padding: 0;
}
.sidebar li {
  margin-bottom: 10px;
}
.sidebar a {
  text-decoration: none;
  color: #333;
}
.sidebar a:hover {
  color: #42b983;
}
</style>

在布局中使用侧边导航

在主布局文件(如 App.vueLayout.vue)中引入侧边导航组件:

<template>
  <div class="app-container">
    <Sidebar />
    <main class="main-content">
      <router-view />
    </main>
  </div>
</template>

<script>
import Sidebar from './components/Sidebar.vue'

export default {
  components: {
    Sidebar
  }
}
</script>

<style>
.app-container {
  display: flex;
}
.main-content {
  flex: 1;
  padding: 20px;
}
</style>

动态生成导航菜单

如果需要从后端获取菜单数据,可以使用异步方法:

<script>
export default {
  data() {
    return {
      menuItems: []
    }
  },
  async created() {
    try {
      const response = await fetch('/api/menu')
      this.menuItems = await response.json()
    } catch (error) {
      console.error('获取菜单失败:', error)
    }
  }
}
</script>

嵌套路由支持

对于多级菜单,可以修改数据结构并添加递归组件:

<template>
  <div class="sidebar">
    <ul>
      <li v-for="item in menuItems" :key="item.path">
        <router-link v-if="!item.children" :to="item.path">{{ item.name }}</router-link>
        <template v-else>
          <div @click="toggleSubmenu(item)">
            {{ item.name }}
          </div>
          <ul v-show="item.expanded">
            <li v-for="child in item.children" :key="child.path">
              <router-link :to="child.path">{{ child.name }}</router-link>
            </li>
          </ul>
        </template>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        {
          path: '/dashboard',
          name: '仪表盘',
          expanded: false
        },
        {
          name: '产品',
          expanded: false,
          children: [
            { path: '/products/list', name: '产品列表' },
            { path: '/products/add', name: '添加产品' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleSubmenu(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

响应式侧边栏

添加响应式功能,在小屏幕设备上可以折叠侧边栏:

vue实现侧边导航

<template>
  <div class="sidebar" :class="{ 'collapsed': isCollapsed }">
    <button @click="toggleSidebar">☰</button>
    <ul v-show="!isCollapsed">
      <!-- 菜单项 -->
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    }
  },
  methods: {
    toggleSidebar() {
      this.isCollapsed = !this.isCollapsed
    }
  }
}
</script>

<style>
.sidebar {
  transition: width 0.3s;
}
.sidebar.collapsed {
  width: 50px;
}
</style>

这些方法提供了实现侧边导航的基本框架,可以根据具体需求进行调整和扩展。

标签: 侧边vue
分享给朋友:

相关文章

vue实现选区创建

vue实现选区创建

Vue 实现选区创建的方法 在 Vue 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ran…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tabl…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提交…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…