element ui+vue制作导航栏菜单(完整)

本文详细介绍了在Vue项目中如何配置路由和左侧导航,重点讲解了如何在Home组件下注册所有可用导航页面的路由配置,并解决了重复点击同一导航项导致的错误。

首先看路由 (我的vue文件是随便创建的不标准 注意了,这里只是为了让大家看一下路由)
因为内容部分以及头部部分都是基于主页面的,所以所有可用左侧导航的页面router配置我都放在了Home下面注册(也可能自己理解的不对 希望大家指正)

Home主要使用饿了么页面布局的第四个如下图: 大家有需要的可以自己选择这里都不过多解释了 以下就是Home页面 也是主页面
在这里插入图片描述
以下是左侧导航配置
在这里插入图片描述
最后呈现一下最终页面
在这里插入图片描述
当你点击二级菜单之后进行刷新 页面加载之后所选二级菜单依旧会高亮 这就是第一幅图中 :default-active="$route.path"的作用

再补充一点 当我重复点击选中的导航是报如下错误 我去找了一下原因应该是重复进入同一路由
在这里插入图片描述
解决方法:
为跳转错误的方法全局加上错误捕获。
const routerPush = VueRouter.prototype.push
VueRouter.prototype.push = function (location) {
return routerPush.call(this, location).catch(error => error)
}
以上代码在main.js,或者router/index.js 下执行,以及new VueRouter之前之后都一样。因为是重置的VueRouter原型对象上的push事件,给原型对象的push事件添加上了捕获异常,所以会通过原型链改变所有相关对象。

replace 方法重复跳转错误与上方类似,把push改成replace就好。

(最后一句是复制别人的 附上链接) ----->亲测有效

<think> 我们被要求提供一个使用Element UIVue Router实现导航栏跳转路由的完整项目示例。根据引用内容,我们可以总结出关键点: 1. 在el-menu组件上设置`:router="true"`,这样菜单项被点击时会使用vue-router进行跳转。 2. 每个菜单项(el-menu-item)的index属性应该设置为路由的path(注意路径要以'/'开头,例如'/home')。 3. 设置default-active为当前路由路径(this.$route.path),以确保当前激活的菜单项与路由匹配。 此外,我们需要一个路由配置文件(router/index.js)来定义路由。 以下是一个完整的项目示例步骤: 步骤1:创建Vue项目并安装依赖 步骤2:配置路由 步骤3:创建页面组件 步骤4:在导航栏组件中使用Element UI的Menu组件,并配置路由跳转 详细代码: 1. 创建项目并安装依赖(假设已创建Vue项目): ```bash npm install element-ui vue-router --save ``` 2. 在src目录下创建router/index.js文件,配置路由: ```javascript import Vue from 'vue' import Router from 'vue-router' import Home from '@/views/Home' import About from '@/views/About' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About } ] }) ``` 3. 创建两个页面组件(在src/views目录下): - Home.vue ```vue <template> <div>首页</div> </template> ``` - About.vue ```vue <template> <div>关于我们</div> </template> ``` 4. 在App.vue(或某个布局组件)中,使用Element UI的Menu组件,并设置路由跳转: ```vue <template> <div id="app"> <el-menu :router="true" :default-active="$route.path" mode="horizontal" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-menu-item index="/">首页</el-menu-item> <el-menu-item index="/about">关于我们</el-menu-item> </el-menu> <router-view></router-view> </div> </template> <script> export default { name: 'App' } </script> ``` 5. 在main.js中引入Element UI: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import App from './App.vue' import router from './router' Vue.use(ElementUI) new Vue({ router, render: h => h(App) }).$mount('#app') ``` 这样,当点击菜单项时,就会跳转到对应的路由,并且当前激活的菜单项会高亮。 注意:如果路由有嵌套,或者需要更复杂的菜单结构(比如子菜单),可以使用el-submenu,并且同样设置index为路由路径。 引用说明: 根据引用[1]和引用[2]的内容,我们实现了导航栏跳转的基本配置,包括设置`router`属性、index绑定路由路径、以及设置default-active为当前路由路径。 相关问题: 1. 如何在Element UI导航菜单中处理嵌套路由? 2. 如何实现动态菜单(根据权限生成不同的菜单项)? 3. 在Vue2中使用Element UI菜单时,如何避免重复点击同一路由时的错误提示? 注意:由于用户要求完整的项目示例,以上代码已经能够构成一个最小可运行示例。用户可以根据需要扩展。 </think>以下是使用 Element UIVue Router 实现导航栏跳转路由的完整项目示例,结合引用内容和最佳实践: ### 项目结构 ```bash src/ ├── router │ └── index.js # 路由配置 ├── views/ # 页面组件 │ ├── Home.vue │ ├── Device.vue │ ├── Params.vue │ └── Picture.vue ├── components │ └── NavMenu.vue # 导航栏组件 └── App.vue ``` ### 核心代码实现 1. **路由配置 (`src/router/index.js`)** ```javascript import Vue from 'vue' import Router from 'vue-router' import Home from '@/views/Home.vue' import Device from '@/views/Device.vue' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/device', // 注意:路径必须以/开头 name: 'Device', component: Device }, // 其他路由... ] }) ``` 2. **导航栏组件 (`src/components/NavMenu.vue`)** ```vue <template> <el-menu :router="true" :default-active="$route.path" mode="horizontal" > <el-menu-item index="/"> <i class="el-icon-s-home"></i> <span>首页</span> </el-menu-item> <el-menu-item index="/device"> <i class="el-icon-cpu"></i> <span>设备管理</span> </el-menu-item> <!-- 其他菜单项 --> </el-menu> </template> <script> export default { watch: { // 路由变化时更新激活菜单 '$route'(to) { this.$nextTick(() => { this.$refs.menu.activeIndex = to.path }) } } } </script> ``` 3. **主应用入口 (`src/App.vue`)** ```vue <template> <div id="app"> <NavMenu /> <router-view class="main-content"/> </div> </template> <script> import NavMenu from '@/components/NavMenu.vue' export default { components: { NavMenu } } </script> ``` ### 关键配置说明(引用[1][^1]) 1. **`:router="true"`** 启用 Vue Router 集成模式,使菜单点击触发路由跳转 2. **`index` 属性** 必须设置为完整路由路径(含开头的`/`),如: ```html <el-menu-item index="/device">设备管理</el-menu-item> ``` 3. **`default-active`** 绑定 `$route.path` 实现路由变化时自动更新激活状态: ```html :default-active="$route.path" ``` ### 完整流程演示 ```mermaid graph TD A[用户点击导航菜单] --> B[Menu组件index属性] B --> C[匹配router/index.js中的path] C --> D[加载对应组件] D --> E[RouterView渲染组件] E --> F[更新$route.path] F --> G[Menu高亮当前项] ``` ### 常见问题解决方案 1. **菜单不高亮** 确保 `default-active` 绑定的是 `$route.path` 而非 `$route.name` 2. **路由跳转失败** 检查路由配置中的 `path` 是否以 `/` 开头(引用[2][^2]) 3. **嵌套路由处理** 使用 `el-submenu` 实现多级菜单: ```vue <el-submenu index="/system"> <template #title>系统管理</template> <el-menu-item index="/system/users">用户管理</el-menu-item> <el-menu-item index="/system/roles">角色管理</el-menu-item> </el-submenu> ``` > 实际项目示例: > [GitHub - vue2-element-admin](https://github.com/PanJiaChen/vue-element-admin)(企业级实践) > [Gitee - vue2-element-tpl](https://gitee.com/mirrors/vue-admin-template)(精简模板)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值