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

  • moo音乐是哪家公司的(moo音乐 知乎)

    moo音乐是哪家公司的(moo音乐 知乎)

  • 华为nova7如何取消HD(华为nova7如何取电话卡)

    华为nova7如何取消HD(华为nova7如何取电话卡)

  • oppo watch怎么用微信(oppowatch怎么用小天才)

    oppo watch怎么用微信(oppowatch怎么用小天才)

  • 苹果手机dock栏变透明(苹果手机dock栏怎么设置4个以上应用)

    苹果手机dock栏变透明(苹果手机dock栏怎么设置4个以上应用)

  • 取消订阅为什么还扣费(取消订阅为什么订阅里面没有那个软件)

    取消订阅为什么还扣费(取消订阅为什么订阅里面没有那个软件)

  • 华为手机时间日期怎么设置(华为手机时间日历显示在桌面怎么设置?)

    华为手机时间日期怎么设置(华为手机时间日历显示在桌面怎么设置?)

  • 芒果tv投屏为什么这么卡(芒果tv投屏为什么不能连续播放)

    芒果tv投屏为什么这么卡(芒果tv投屏为什么不能连续播放)

  • 华为荣耀10x什么时候上市(华为荣耀10x什么存储在卡里)

    华为荣耀10x什么时候上市(华为荣耀10x什么存储在卡里)

  • 腾讯会议开视频时候可以切出去吗(腾讯会议开视频人数上限是多少)

    腾讯会议开视频时候可以切出去吗(腾讯会议开视频人数上限是多少)

  • 怎么在抖音直播间发红包(怎么在抖音直播卖东西)

    怎么在抖音直播间发红包(怎么在抖音直播卖东西)

  • 微信朋友圈信息怎么删除掉?(微信朋友圈信息为什么不能全部显示)

    微信朋友圈信息怎么删除掉?(微信朋友圈信息为什么不能全部显示)

  • vivo手机摔了一下开不了机怎么办(vivo手机摔了一下子黑屏了怎么办)

    vivo手机摔了一下开不了机怎么办(vivo手机摔了一下子黑屏了怎么办)

  • 抖音极速版怎么看直播(抖音极速版怎么升级最新版本)

    抖音极速版怎么看直播(抖音极速版怎么升级最新版本)

  • oppoa83手机内存不足怎么办(oppoa83手机内存移到sd卡)

    oppoa83手机内存不足怎么办(oppoa83手机内存移到sd卡)

  • 苹果6s升级13系统一直重启(苹果6s升级13.6.1后怎么样)

    苹果6s升级13系统一直重启(苹果6s升级13.6.1后怎么样)

  • word2003脚注怎么设置(word2019添加脚注)

    word2003脚注怎么设置(word2019添加脚注)

  • 一加7T怎么开启三指截屏(一加7t怎么开启5g)

    一加7T怎么开启三指截屏(一加7t怎么开启5g)

  • 小米ai音响能不能改昵称(小米ai音响使用技巧)

    小米ai音响能不能改昵称(小米ai音响使用技巧)

  • 设备信息权限在哪里设置(设备信息授权)

    设备信息权限在哪里设置(设备信息授权)

  • 苹果电话技术支持有效期多久(苹果电话技术支持已过期怎么回事)

    苹果电话技术支持有效期多久(苹果电话技术支持已过期怎么回事)

  • 智慧团建为什么打不开(智慧团建为什么没有验证码)

    智慧团建为什么打不开(智慧团建为什么没有验证码)

  • 荣耀7x双卡怎么插(华为荣耀7x双卡双待怎么设置)

    荣耀7x双卡怎么插(华为荣耀7x双卡双待怎么设置)

  • pe盘是啥(pe盘是干嘛的)

    pe盘是啥(pe盘是干嘛的)

  • 农业免税收入怎么填纳税申报表
  • 固定资产报废进项税额怎么处理
  • 转让土地使用权营业税税率
  • 六税一费优惠政策
  • 开票要交印花税吗
  • 商业企业收取各项费用的税务与会计处理
  • 股票收入属于按什么分类
  • 股息红利税补缴什么意思
  • 契税的会计分录有哪些
  • 企业收到宣传费怎么入账
  • 一般纳税人的含税收入怎么算
  • 单位收到社保补缴通知书后怎么办
  • 工会经费基数是上个月收到的工资还是什么
  • 国有企业出租房屋管理规定
  • 企业如何处理劳方与资方的关系
  • 转账支票怎么进账到个人账户
  • 简易注销还要去找专管员
  • 免抵税额计入什么科目
  • 面条适用的增值税率是
  • 股权取得
  • 公司为职工缴纳的医保不计入账户吗
  • 外包人员培训费入什么科目
  • 股东转入实收资本
  • 异地项目预缴个人所得税
  • 可全额扣除的公益性捐赠支出
  • 费用报销交通费
  • 苹果手机搜不到airpods
  • 以前年度的其他应付款不用付怎么处理
  • 忘记excel工作表保护密码怎么办
  • 三方转账协议应该怎么写
  • 整体租赁经营模式是什么
  • 前端lru
  • php中link什么意思
  • 手把手教你暴力破解wifi密码
  • 未分配利润转增股本要交税吗怎么交
  • thinkphp框架入门
  • 深入理解php中的数字
  • 小规模纳税人工程税率是多少
  • html怎么用java
  • 先收到保险公司赔付然后赔给顾客医药费怎么做帐
  • pandas inner join
  • java泛型的定义和使用
  • 旅游业差额开票税率
  • 企业适用的增值税税率
  • 新公司开基本户需要带什么材料
  • 工资结算汇总表怎么填
  • c#代码怎么写
  • 小企业长期债券投资入账价值
  • sqlserver2019性能
  • microsoft SQL server 2008有什么用
  • 企业生产经营发展
  • 国际结算手续费收入增值税
  • 长期待摊费用进项税分录
  • 如何判定专利是否侵权
  • 保险赔偿款账务处理
  • 现金折扣与商业折扣的计算
  • 预付差旅费属于什么类型
  • solaris重启服务器命令
  • 新装的ubuntu18没有网络
  • ubuntu 16.04 u盘安装
  • hprof-conv.exe
  • 并发控制三个问题
  • linux chakan
  • 如何重设苹果手机的ID密码
  • regloadr.exe - regloadr是什么进程 有什么用
  • win7防火墙打不开错误代码6801
  • 三种方法完美解决问题
  • win10 1511(win10 TH2)如何调整开始屏幕磁贴大小?
  • windows xp快捷键设置在哪
  • perl 计算
  • uiview继承哪个类
  • listview点击获取内容
  • android 自定义spinner
  • 网卡流量怎么计算
  • 简述JavaScript中全局变量与局部变量的作用域
  • Protocol Buffers(Protobuf)开发者指南---概览
  • jquery跨域请求有哪些方式
  • 重大税务违法案件一案双查标准
  • 甲种本什么意思
  • 党建 共享
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设