后端返回给前端两个数组,第一个数组是导航栏内容,第二个数组是侧边栏内容及侧边栏对应的页面内容,前端根据这两个数组,基于vue+elementui实现点击顶部导航栏,定位到对应侧边栏,点击侧边栏的某一项,显示对应的页面内容
时间: 2024-05-04 10:21:23 浏览: 104
好的,这个功能可以通过 Vue Router 实现。
首先,在 Vue 项目中安装 Vue Router:
```
npm install vue-router --save
```
然后在 `src/router/index.js` 中定义路由:
```js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
{
path: '/',
redirect: '/home' // 首页重定向到 /home
},
{
path: '/home',
name: 'Home',
component: () => import('@/views/Home.vue')
},
{
path: '/about',
name: 'About',
component: () => import('@/views/About.vue')
},
// 其他页面
]
const router = new VueRouter({
mode: 'history', // 使用 HTML5 history 模式
base: process.env.BASE_URL,
routes
})
export default router
```
其中,我们定义了两个页面:`Home` 和 `About`,其他页面类似。
然后,在 `src/App.vue` 中,我们可以使用 `el-menu` 和 `el-submenu` 组件来实现导航栏和侧边栏的布局:
```html
<template>
<div class="app">
<el-container>
<el-header>
<!-- 导航栏 -->
<el-menu :default-active="$route.path" mode="horizontal" @select="handleSelect">
<el-menu-item v-for="item in navList" :key="item.path" :index="item.path">{{ item.title }}</el-menu-item>
</el-menu>
</el-header>
<el-container>
<el-aside>
<!-- 侧边栏 -->
<el-menu :default-active="$route.path" :default-openeds="defaultOpeneds" class="el-menu-vertical-demo" @select="handleSelect">
<el-submenu v-for="item in sidebarList" :key="item.title" :index="item.path">
<template slot="title">{{ item.title }}</template>
<el-menu-item v-for="subItem in item.children" :key="subItem.path" :index="subItem.path">{{ subItem.title }}</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<el-main>
<!-- 页面内容 -->
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
navList: [], // 导航栏数组
sidebarList: [], // 侧边栏数组
defaultOpeneds: [] // 默认展开的侧边栏
}
},
created() {
// 向后端请求导航栏和侧边栏的数据,并设置到对应的数组中
// ...
},
methods: {
handleSelect(index) {
// 点击导航栏或侧边栏时,跳转到对应的路由
this.$router.push(index)
}
}
}
</script>
```
在 `data` 中定义了三个变量:`navList`、`sidebarList` 和 `defaultOpeneds`。
其中,`navList` 存储了导航栏的数组,`sidebarList` 存储了侧边栏的数组,`defaultOpeneds` 存储了默认展开的侧边栏。
在 `created` 钩子函数中,我们可以向后端请求导航栏和侧边栏的数据,并将数据设置到对应的数组中。
在 `handleSelect` 方法中,我们可以通过 `this.$router.push(index)` 实现路由跳转,其中 `index` 为路由的路径。
最后,在每个页面中,我们可以使用 `el-breadcrumb` 组件来实现面包屑导航:
```html
<template>
<div>
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/about' }">关于我们</el-breadcrumb-item>
<!-- 其他面包屑导航 -->
</el-breadcrumb>
<!-- 页面内容 -->
</div>
</template>
```
其中,`:to` 属性绑定的是一个对象,该对象的 `path` 属性为路由的路径。
这样,我们就实现了点击顶部导航栏,定位到对应侧边栏,点击侧边栏的某一项,显示对应的页面内容的功能。
阅读全文