位置: 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路由传参的几种方式)

  • 微信拉黑对方知道吗(微信拉黑对方知道吗能微信提醒吗)

    微信拉黑对方知道吗(微信拉黑对方知道吗能微信提醒吗)

  • 文本框环绕方式怎么设置(文本框环绕方式为浮于文字上方)

    文本框环绕方式怎么设置(文本框环绕方式为浮于文字上方)

  • 红米k40有否有呼吸灯(redmi k40有呼吸灯吗)

    红米k40有否有呼吸灯(redmi k40有呼吸灯吗)

  • iqoo5有红外遥控功能吗(iqoo5有没有红外)

    iqoo5有红外遥控功能吗(iqoo5有没有红外)

  • 滴滴多少五星升一分(滴滴5星和4.9星)

    滴滴多少五星升一分(滴滴5星和4.9星)

  • 华为智能助手快递不见了(华为智能助手快递功能绑定怎么取消)

    华为智能助手快递不见了(华为智能助手快递功能绑定怎么取消)

  • 键盘小写字母按哪个键(键盘输入小写字母)

    键盘小写字母按哪个键(键盘输入小写字母)

  • 什么叫多进制数字调制(什么是多进制调制)

    什么叫多进制数字调制(什么是多进制调制)

  • win10系统多少GB(win10系统多少个g够用)

    win10系统多少GB(win10系统多少个g够用)

  • 打电话没录音可以查录音吗(打电话没录音可以调出来吗)

    打电话没录音可以查录音吗(打电话没录音可以调出来吗)

  • 拼多多的拼小圈是什么时候开始有的(拼多多的拼小圈怎么关闭动态)

    拼多多的拼小圈是什么时候开始有的(拼多多的拼小圈怎么关闭动态)

  • iqooneo3电池容量(iqooneo3电池容量4430)

    iqooneo3电池容量(iqooneo3电池容量4430)

  • 苹果xsmax断触怎么解决(苹果xsmax断触怎么解决方法)

    苹果xsmax断触怎么解决(苹果xsmax断触怎么解决方法)

  • oppor17自带游戏变声器吗(oppor17自带游戏空间怎么恢复)

    oppor17自带游戏变声器吗(oppor17自带游戏空间怎么恢复)

  • 手机被别人举报停机怎么办(手机被别人举报怎么办)

    手机被别人举报停机怎么办(手机被别人举报怎么办)

  • vivo怎么语音召唤小v(vivo手机如何语音)

    vivo怎么语音召唤小v(vivo手机如何语音)

  • 小米bn39电池是什么型号(小米电池bm3b)

    小米bn39电池是什么型号(小米电池bm3b)

  • oppor11充电器多少w(oppor11充电器多少钱)

    oppor11充电器多少w(oppor11充电器多少钱)

  • 京东待评价怎么删除(京东待评价怎么删除不了)

    京东待评价怎么删除(京东待评价怎么删除不了)

  • 在家k歌怎么不吵到邻居(在家k歌怎么不被打断)

    在家k歌怎么不吵到邻居(在家k歌怎么不被打断)

  • amd svm有什么用(amd的svm)

    amd svm有什么用(amd的svm)

  • 魅族16可以用ep31吗(魅族16可以用日本的卡么)

    魅族16可以用ep31吗(魅族16可以用日本的卡么)

  • cad画圆弧的快捷键(cad圆弧命令有几种画圆弧方法)

    cad画圆弧的快捷键(cad圆弧命令有几种画圆弧方法)

  • 360se.exe进程介绍 360se.exe进程占用CPU过高原因有哪些(360se进程太多)

    360se.exe进程介绍 360se.exe进程占用CPU过高原因有哪些(360se进程太多)

  • 嘴型融合 wav2lip 升级版

    嘴型融合 wav2lip 升级版

  • 【vue2】vuex的安装、配置与使用(怎么安装vue2.0)

    【vue2】vuex的安装、配置与使用(怎么安装vue2.0)

  • 计提生产应税产品的分录
  • 填专项扣除对个人还是公司受益
  • 分公司可以用总公司的业绩吗
  • 小规模房产税减免
  • 从商业企业购进商品
  • 石油天然气管道保护法
  • 企业所得税汇算清缴申报表
  • 营改增后个人所得税计税依据实例
  • 行政事业单位应当进行摊销的无形资产
  • 转出上年的进项税额怎么做分录
  • 民非企业购买低保政策
  • 拆迁补偿款上交财政
  • 收到的扶贫工作经费会计分录
  • 房屋租赁发票需要备注吗
  • 上月有留抵的进项税额本月会计分录
  • 支付的专家费怎么入账
  • 个税退税手续费税率
  • 银行承兑汇票到期怎么提示付款
  • 当期所得税费用与递延所得税费用
  • 法人实名认证后没有绑定企业怎么办
  • 民间非营利组织会计科目
  • 电脑玩网络游戏一小时多少流量
  • win10应用商店变成英文怎么改成中文
  • 离职违约金赔偿标准
  • 结转收入怎么计算
  • centos apache配置文件
  • 如何修复win11系统
  • win10多任务分屏怎么关闭
  • PHP:pg_fetch_array()的用法_PostgreSQL函数
  • 职工教育经费支出包括哪些内容
  • PHP:mcrypt_module_is_block_mode()的用法_Mcrypt函数
  • 建设工程劳务分包合同属于建设工程合同吗
  • 我找到了这个
  • 免费镜像翻转软件
  • 本地部署stable diffusion需要什么显卡
  • 长期借款利息的账务处理涉及的会计科目有
  • ai引领技术变革是什么
  • php array_product
  • php简单获取网站的方法
  • 退回的货款应该记什么费用
  • 无偿划转的资产交什么税收
  • 电子回单是什么样子
  • mongodb 随机获取一条数据
  • 小规模纳税人如何申报增值税
  • 防暑降温用品进口品牌
  • sqlmap暴力破解
  • 商品流通企业流程图
  • 资产负债表中的固定资产怎么算
  • 员工报销工伤险怎么报销
  • 借分公司的款收据怎么开
  • 单位车辆转籍
  • 未结转本年利润的股东分红的分录
  • 汇算清缴后缴纳所得税会计分录
  • 进项税有什么相关要求
  • 商业批发企业有哪些
  • sql去除指定数据
  • 如何清除sql2008r2日志
  • sql2008没有数据库
  • sql server?
  • solaris syslog
  • xp快捷桌面图标
  • win8 开机
  • ahci模式下安装win7蓝屏
  • win10启动提示
  • win8系统怎么设置
  • cocos2d怎么用
  • linux查看多线程
  • linux curl用法
  • json的parseobject
  • mac的命令
  • linux ssh 安装
  • 怎样用python
  • javascript中br
  • Android Studio:adb not responding
  • jQuery实现table中的tr上下移动并保持序号不变的实例代码
  • 国家税务局涉税信息公开
  • 小规模纳税人开1%普票怎么报税
  • 全资子公司和全资子企业的区别
  • 湖南电子税务申报
  • 新疆医保哪里查
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设