位置: IT常识 - 正文

【前端】Vue+Element UI案例:通用后台管理系统-导航栏(前端vue3)

编辑:rootadmin
【前端】Vue+Element UI案例:通用后台管理系统-导航栏 文章目录目标代码0.数据1.其他准备2.结构3.动态显示数据4.主题:背景色,点击悬停效果5.去除padding6.去除下拉框7.标题8.路由跳转总代码组件CommonAside.vue文件结构参考

推荐整理分享【前端】Vue+Element UI案例:通用后台管理系统-导航栏(前端vue3),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue el,前端element ui,element 前端,前端vue3,前端 vue,vue前端菜鸟教程,前端 vue,elm vue,内容如对您有帮助,希望把文章链接给更多的朋友!

参考视频:VUE项目,VUE项目实战,vue后台管理系统,前端面试,前端面试项目

案例链接【前端】Vue+Element UI案例:通用后台管理系统-导航栏(视频p1-16)https://blog.csdn.net/karshey/article/details/127640658【前端】Vue+Element UI案例:通用后台管理系统-Header+导航栏折叠(p17-19)https://blog.csdn.net/karshey/article/details/127652862【前端】Vue+Element UI案例:通用后台管理系统-Home组件:卡片、表格(p20-22)https://blog.csdn.net/karshey/article/details/127674643【前端】Vue+Element UI案例:通用后台管理系统-Echarts图表准备:axios封装、mock数据模拟实战(p23-25)https://blog.csdn.net/karshey/article/details/127735159【前端】Vue+Element UI案例:通用后台管理系统-Echarts图表:折线图、柱状图、饼状图(p27-30)https://blog.csdn.net/karshey/article/details/127737979【前端】Vue+Element UI案例:通用后台管理系统-面包屑、tag栏(p31-35)https://blog.csdn.net/karshey/article/details/127756733【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出(p36-38)https://blog.csdn.net/karshey/article/details/127787418【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改、Pagination分页、搜索框(p39-42)https://blog.csdn.net/karshey/article/details/127777962【前端】Vue+Element UI案例:通用后台管理系统-登陆页面Login(p44)https://blog.csdn.net/karshey/article/details/127795302【前端】Vue+Element UI案例:通用后台管理系统-登陆页面功能:登录权限跳转、路由守卫、退出(p45-46)https://blog.csdn.net/karshey/article/details/127849502【前端】Vue+Element UI案例:通用后台管理系统-登陆不同用户显示不同菜单、动态添加路由(p47-48)https://blog.csdn.net/karshey/article/details/127865621【前端】Vue+Element UI案例:通用后台管理系统-项目总结https://blog.csdn.net/karshey/article/details/127867638目标

悬停效果点击效果其他:点击展开和收缩动态显示“首页”“商品管理”等有路由跳转

其实是项目的导航栏组件。只打算看导航栏部分的可以跳过1.其他准备。

代码0.数据

我们把它单独放到一个MenuData.js中,然后用export default暴露出来。

{ path: '/', name: 'home', label: '首页', icon: 's-home', url: 'Home/Home' }, { path: '/mall', name: 'mall', label: '商品管理', icon: 'video-play', url: 'MallManage/MallManage' }, { path: '/user', name: 'user', label: '用户管理', icon: 'user', url: 'UserManage/UserManage' }, { label: '其他', icon: 'location', children: [ { path: '/page1', name: 'page1', label: '页面1', icon: 'setting', url: 'Other/PageOne' }, { path: '/page2', name: 'page2', label: '页面2', icon: 'setting', url: 'Other/PageTwo' } ] }1.其他准备

注意要查看官方文档:官方文档

全局引入Element UI

先安装Element UI:

npm i element-ui -S

全局引入:在main.js中

import ElementUI from 'element-ui'Vue.use(ElementUI)

路由配置

这里我们先配置Home页面(会显示导航栏的页面)。官方文档:Vue Router

安装:这里的版本是3.6.5 ps:可以在npm网站上查到包的所有版本,我们这里要的是3.x.x的最新版。

npm install vue-router@3.6.5

路由的配置:目前只配置了Main组件的

import Vue from "vue";import VueRouter from "vue-router";import Main from '../Views/Main'Vue.use(VueRouter)const routes=[ // 主路由 { path:'/', component:Main }]const router = new VueRouter({ routes})export default router

目前的依赖 当前的package.json文件的dependencies应当如下:

"dependencies": { "core-js": "^3.8.3", "element-ui": "^2.15.10", "vue": "^2.6.14", "vue-router": "^3.6.5" }

当前的main.js

import Vue from 'vue'import App from './App.vue'import ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.css';import router from './router/index'Vue.config.productionTip = falseVue.use(ElementUI)new Vue({ router, render: h => h(App),}).$mount('#app')

Main.vue布局结构 要的是这个布局: 找到对应代码:

<el-container> <el-aside width="200px">Aside</el-aside> <el-container> <el-header>Header</el-header> <el-main>Main</el-main> </el-container></el-container>

把它放到Main.vue里。

App.vue如下:

<template> <div id="app"> <router-view></router-view> </div></template><script>export default {}</script><style></style>

效果: 接下来我们写一个组件:CommonAside.vue,把导航栏写在这个组件里,再把组件放到Aside中。

【前端】Vue+Element UI案例:通用后台管理系统-导航栏(前端vue3)

因此放了布局的Main.vue如下:

<template> <el-container> <el-aside width="200px"> <common-aside/> </el-aside> <el-container> <el-header>Header</el-header> <el-main>Main</el-main> </el-container> </el-container></template><script>import CommonAside from '../components/CommonAside.vue'export default { data(){ return{} }, components:{ CommonAside }}</script><style></style>

组件CommonAside如下:

<template> <!-- 在这里开始写导航栏 --></template><script>export default {}</script><style></style>

接下来就是本文正题:导航栏。

2.结构

Element UI文档 我们现在Element UI官方文档上找到类似的导航结构:就是你了! 阅读代码,我们不难发现代码分为“展开收起”部分和“导航”部分,我们要的是导航部分。把代码对着我们的目标稍作调整得到:

<el-menu default-active="1-4-1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" :collapse="isCollapse"> <el-menu-item index="2"> <i class="el-icon-menu"></i> <span slot="title">导航一</span> </el-menu-item> <el-submenu index="1"> <template slot="title"> <i class="el-icon-location"></i> <span slot="title">导航二</span> </template> <el-menu-item-group> <span slot="title">分组一</span> <el-menu-item index="1-1">选项1</el-menu-item> <el-menu-item index="1-2">选项2</el-menu-item> </el-menu-item-group> </el-submenu></el-menu>

效果:

3.动态显示数据

导航栏分为一级导航栏和二级导航栏,目标中的 其他-页面1 就是二级导航栏,首页、商品管理、用户管理 都是一级导航栏。

一级和二级的区别在于:数据中是否有children属性,如果有,那它的children属性就是二级导航。所以这里要用到计算属性。

computed:{ noChildren(){ // 如果没有children则返回true,会被过滤器留下 return this.MenuData.filter(item=>!item.children) }, hasChildren(){ return this.MenuData.filter(item=>item.children) }}

一级导航栏的循环显示:

<!-- 观察数据,我们发现name是唯一标识 --><!-- 查看文档,index是唯一标识 --> <el-menu-item v-for="item in noChildren" :key="item.name" :index="item.name"> <!-- 这里是字体图标,用模板字符串拼接,注意要动态绑定 --> <i :class="`el-icon-${item.icon}`"></i> <span slot="title">{{item.label}}</span> </el-menu-item>

效果: 二级导航栏也是类似做法:

<el-submenu v-for="item in hasChildren" :key="item.name" :index="item.name"> <template slot="title"> <i :class="`el-icon-${item.icon}`"></i> <span slot="title">{{item.label}}</span> </template> <el-menu-item-group v-for="subItem in item.children" :key="subItem.name"> <el-menu-item :index="subItem.name">{{subItem.label}}</el-menu-item> </el-menu-item-group> </el-submenu></el-menu>

效果:

4.主题:背景色,点击悬停效果

再次打开文档,找到自定义颜色部分: 显然是这里:我们把它直接复制粘贴。 则标签如下:

<el-menu default-active="1-4-1"class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose":collapse="isCollapse" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">

效果:就是这样!

5.去除padding

在浏览器中F12可知,padding是由body等标签自动带有的,我们只需要在App.vue中把它们清除即可(reset)。

html,body,h3,p { margin: 0; padding: 0}6.去除下拉框

这里我们先安装less:这样写CSS可以嵌套,更加方便。

npm install less less-loader --save

浏览器F12,显然有下拉框的这个类是:el-menu 把el-menu设置成height:100vh即可。

7.标题

html:

<!-- 要放到导航栏里面 --><h3>通用后台管理系统</h3>

css:

<style lang="less" scoped>.el-menu{ height:100vh; h3{ text-align: center; line-height: 48px; color: #fff; font-size: 16px; font-weight: 400; }}</style>

效果:

8.路由跳转

添加点击事件:

<el-menu-item@click="clickItem(item)" v-for="item in noChildren" :key="item.name" :index="item.name"><el-menu-item-group v-for="subItem in item.children" :key="subItem.name"> <el-menu-item @click="clickItem(subItem)" :index="subItem.name">{{ subItem.label }}</el-menu-item></el-menu-item-group>

js:

clickItem(item){ // 防止自己跳自己的报错 if(this.$route.path!==item.path&&!(this.$route.path==='/home'&&(item.path==='/'))){ this.$router.push(item.path) }}

不过目前只有一个路由。

总代码组件CommonAside.vue<template> <el-menu default-active="1-4-1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" :collapse="isCollapse" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <!-- 要放到导航栏里面 --> <h3>通用后台管理系统</h3> <!-- 观察数据,我们发现name是唯一标识 --> <!-- 查看文档,index是唯一标识 --> <el-menu-item @click="clickItem(item)" v-for="item in noChildren" :key="item.name" :index="item.name"> <!-- 这里是字体图标,用模板字符串拼接,注意要动态绑定 --> <i :class="`el-icon-${item.icon}`"></i> <span slot="title">{{ item.label }}</span> </el-menu-item> <el-submenu v-for="item in hasChildren" :key="item.name" :index="item.name"> <template slot="title"> <i :class="`el-icon-${item.icon}`"></i> <span slot="title">{{ item.label }}</span> </template> <el-menu-item-group @click="clickItem(subItem)" v-for="subItem in item.children" :key="subItem.name"> <el-menu-item :index="subItem.name">{{ subItem.label }}</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu></template><style lang="less" scoped>.el-menu-vertical-demo:not(.el-menu--collapse) { width: 200px; min-height: 400px;}.el-menu{ height:100vh; h3{ text-align: center; line-height: 48px; color: #fff; font-size: 16px; font-weight: 400; }}</style><script>import MenuData from '../data/MenuData'export default { data() { return { isCollapse: false, MenuData }; }, methods: { handleOpen(key, keyPath) { console.log(key, keyPath); }, handleClose(key, keyPath) { console.log(key, keyPath); }, clickItem(item){ // 防止自己跳自己的报错 if(this.$route.path!==item.path&&!(this.$route.path==='/home'&&(item.path==='/'))){ this.$router.push(item.path) } } }, computed: { noChildren() { // 如果没有children则返回true,会被过滤器留下 return this.MenuData.filter(item => !item.children) }, hasChildren() { return this.MenuData.filter(item => item.children) } }}</script>文件结构

参考

VUE项目,VUE项目实战,vue后台管理系统,前端面试,前端面试项目:p1-16

本文链接地址:https://www.jiuchutong.com/zhishi/297274.html 转载请保留说明!

上一篇:【CSS】CSS字体样式【CSS基础知识详解】(css中字体样式设置)

下一篇:vue3的路由传参query、params以及动态路由传参(vue路由传参的几种方式)

  • 微信公众号运营者如何涨粉丝(微信公众号运营推广方案)

    微信公众号运营者如何涨粉丝(微信公众号运营推广方案)

  • 真实的励志故事(真实的励志故事有哪些)

    真实的励志故事(真实的励志故事有哪些)

  • LGP888PGL(lgp880参数)

    LGP888PGL(lgp880参数)

  • oppok9怎么设置下面三个键(oppor9怎么设置下载权限)

    oppok9怎么设置下面三个键(oppor9怎么设置下载权限)

  • ios15支持模拟门禁卡吗(ios15 模拟nfc)

    ios15支持模拟门禁卡吗(ios15 模拟nfc)

  • 苹果云端的照片怎么恢复到手机(苹果云端的照片怎么传到安卓手机)

    苹果云端的照片怎么恢复到手机(苹果云端的照片怎么传到安卓手机)

  • 手机用什么播放rmvb文件(手机用什么播放器看视频)

    手机用什么播放rmvb文件(手机用什么播放器看视频)

  • oppoa11有没有红外线功能(oppoa11有没有红外感应)

    oppoa11有没有红外线功能(oppoa11有没有红外感应)

  • 一个手机怎么下载两个微信(一个手机怎么下载两个抖音app)

    一个手机怎么下载两个微信(一个手机怎么下载两个抖音app)

  • 三星音乐播放器不见了(三星音乐播放器app下载)

    三星音乐播放器不见了(三星音乐播放器app下载)

  • 抖音拉黑能收到对方私信吗(已经删掉的抖音聊天记录怎么恢复)

    抖音拉黑能收到对方私信吗(已经删掉的抖音聊天记录怎么恢复)

  • 怎么删除抖自己的视频作品(怎么删除抖自己的抖音)

    怎么删除抖自己的视频作品(怎么删除抖自己的抖音)

  • 网页实际上是一种什么文件(网页一般称作)

    网页实际上是一种什么文件(网页一般称作)

  • 小米手环为什么连接不上手机(小米手环为什么微信信息来没有提示)

    小米手环为什么连接不上手机(小米手环为什么微信信息来没有提示)

  • 酷狗可以登录两个手机吗(酷狗可以登录两台手机吗)

    酷狗可以登录两个手机吗(酷狗可以登录两台手机吗)

  • modem log是什么意思(modemlogs是什么文件夹)

    modem log是什么意思(modemlogs是什么文件夹)

  • i34170配什么显卡(i34170配什么显卡合适)

    i34170配什么显卡(i34170配什么显卡合适)

  • 抖音里收藏的作品怎么删除(抖音里收藏的作品占内存吗)

    抖音里收藏的作品怎么删除(抖音里收藏的作品占内存吗)

  • 趣步怎么置换不了了(趣步如何)

    趣步怎么置换不了了(趣步如何)

  • 快手小黄车买的东西怎么查不到订单(快手小黄车买的东西怎么查)

    快手小黄车买的东西怎么查不到订单(快手小黄车买的东西怎么查)

  • matlab2016a安装(matlab2016a安装不了)

    matlab2016a安装(matlab2016a安装不了)

  • ipadmini和ipadair和ipad pro的区别(ipad和ipadair哪个更好)

    ipadmini和ipadair和ipad pro的区别(ipad和ipadair哪个更好)

  • 荣耀20参数详细参数(荣耀20参数详细参数配置表)

    荣耀20参数详细参数(荣耀20参数详细参数配置表)

  • a9和a9x有什么区别(oppoa9x和a9有什么区别)

    a9和a9x有什么区别(oppoa9x和a9有什么区别)

  • 电脑开机一直嘀嘀嘀的响不能启动怎么办(电脑开机后一直滴滴)

    电脑开机一直嘀嘀嘀的响不能启动怎么办(电脑开机后一直滴滴)

  • 织梦DEDE系统会员中心限制IP和时间注册防骚扰办法(织梦系统基本参数)

    织梦DEDE系统会员中心限制IP和时间注册防骚扰办法(织梦系统基本参数)

  • 离职补偿的扣税比例
  • 税务网上清卡流程
  • 保险佣金个人所得税怎么算
  • 计提利息要计提手续费吗
  • 建筑企业结转成本怎么算
  • 漏缴的印花税如何补交
  • 红字发票怎么回事
  • 异地施工需要办理什么手续
  • 金融机构利息收入缴纳增值税
  • 年度销售返利的计算方法
  • 预付房租摊销账务处理
  • 用于不动产的进项税能抵扣吗
  • 汽车折旧年份
  • 装修职工宿舍用的瓷砖,灯具等计入什么科目?
  • 开租金发票可以提前开的吗?
  • 房地产开发企业资质管理规定
  • 兼营小规模纳税人增值税优惠
  • 内含报酬率的计算公式插值法
  • 增值税进项销项怎么算
  • 房地产企业预缴增值税及附加税
  • 债转股的税收政策
  • 注册资金印花税什么时候开始交
  • 公司开设食堂需要哪些手续
  • 多缴个税账务处理
  • 红冲的普通发票要给对方吗
  • 企业增速怎么算
  • 管理会计完全成本法和变动成本法例题
  • 演出收入怎样做会计分录
  • 劳务费和合同如何分配
  • win11粘滞键怎么关闭 重启后又有
  • 完美解决win11间歇性掉线
  • pow是什么意思中文翻译
  • pavmail.exe - pavmail进程是什么文件 有什么用
  • 电脑pin码忘了开不了机,且鼠标失灵
  • php函数function
  • 浏览器下载量排名第一的是
  • 利息收入增值税确认时点
  • 浠字的意思和含义是什么
  • 暂估成本的账务处理分录
  • 天然气票据
  • vue企业开发实战
  • 前端es2020
  • python如何删除字典中的键值对
  • 党费结算标准
  • wordpress文章发布不显示作者
  • 固定资产清理的金额怎么算
  • 税率开错了会影响贷款吗
  • 金税四期对企业影响
  • 资本公积的用途有哪些
  • 投资收益记账
  • 去年出口
  • 速动比率和流动比率怎么分析
  • 会计每个月需要打印科目余额表吗
  • 商品流通企业的含义与特点
  • 其他商业项目
  • sql语句错误提示
  • 如何修改sqlserver中sa用户的密码
  • 出现错误,请联系客服
  • win8系统之家官网
  • centos 查看服务
  • 光盘安装系统怎么操作
  • 怎么检测软件有没有毒
  • task运行在哪个工作单元
  • 优麒麟 apk
  • 使用标准用户帐号的方法
  • hmies.exe是什么
  • html模板 js
  • unity f
  • android list
  • unity 3d完全自学教程
  • js图片浏览器
  • jquery用法
  • LeakCanary小记
  • 安卓监听文件读写
  • python结合了什么的高级语言
  • 电子税务局实名认证
  • 个人所得税小孩上大学可以扣除吗
  • 我国现行税率分
  • 湖北省国家税务局官网
  • 一般纳税人财务报表月报还是季报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设