当前位置:首页 > 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 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…

vue实现layout

vue实现layout

Vue 实现 Layout 布局的方法 在 Vue 中实现 Layout 布局通常涉及路由嵌套、组件化设计和动态渲染。以下是几种常见的实现方式: 使用嵌套路由 通过 Vue Router 的嵌套路由…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…