Vue 封装面包屑 (即粘即用)
效果展示(后台管理系统中常用)
如果你也需要如图所示的效果 直接把下面的代码粘贴过去即可
不需要父组件传递任何参数 十分好用;
基本思路:
监听 $route
路由信息;
把当前的信息添加至数组,循环遍历数组
当前的active样式, 也是根据 当前的$route
里的path去决定的
代码写的很清楚了:
Tag
<template><div class="tag" v-if="showTags"><ul><li class="tags-li" v-for="(item,index) in list" :class="{'active': isActive(item.path)}" :key="index"><!--点击每个小按钮跳转相应路由--><router-link :to="item.path" class="tags-li-title">{{item.title}}</router-link><span class="tags-li-icon" @click="closeTags(index)"><i class="el-icon-close"></i></span></li></ul><div class="handleTags"><el-dropdown @command="handleTags" size="mini" type="primary"><el-button type="primary">标签选项<i class="el-icon-arrow-down el-icon--right"></i></el-button><el-dropdown-menu slot="dropdown"><el-dropdown-item command="all">关闭所有</el-dropdown-item><el-dropdown-item command="other">关闭其他</el-dropdown-item></el-dropdown-menu></el-dropdown></div></div>
</template><script>export default {name: "Tag",data() {return {list: []}},computed: {// 显示隐藏面包屑showTags() {return this.list.length > 0;}},watch: {// 通过 监听路由的变化$route(newValue, oldValue) {this.setTages(newValue)}},methods: {// 选中状态 返回 true falseisActive(path) {return path === this.$route.fullPath;},// 标签选项 关闭单个 关闭所有handleTags(command) {command === 'all' ? this.closeAll() : this.closeOther()},// 点击关闭 单个 按钮closeTags(index) {const delItem = this.list.splice(index, 1)[0]; // 获取当前的const item = this.list[index] ? this.list[index] : this.list[index - 1]; // 获取到下一个if (item) { // 有下一个 跳到下一个delItem.path === this.$route.fullPath && this.$router.push(item.path);} else { // 没有 去 home页面this.$router.push('/Home');}},// 点击关闭 所有closeAll() {this.list = [];this.$router.push('/Home');},// 点击关闭其他closeOther() {let currentList = this.list.filter((ele) => {return ele.path === this.$route.fullPath});this.list = currentList},// 展示的数组setTages(newValue) {const isExist = this.list.some(item => {return item.path === newValue.fullPath;});if (!isExist) {if (this.list.length >= 8) {this.list.shift();}this.list.push({title: newValue.meta.title,path: newValue.path,name: newValue.matched[1].components.default.name})}}}}
</script><style scoped lang="scss">.handleTags > > > .el-button {padding: 7px 0;font-size: 12px;}.tag {width: 100%;display: flex;justify-content: space-between;align-items: center;}.tags {position: relative;height: 30px;overflow: hidden;background: #fff;padding-right: 120px;box-shadow: 0 5px 10px #ddd;}.tags ul {box-sizing: border-box;width: 100%;height: 100%;}.tags-li {float: left;margin: 3px 5px 2px 3px;border-radius: 3px;font-size: 12px;overflow: hidden;cursor: pointer;height: 23px;line-height: 23px;border: 1px solid #e9eaec;background: skyblue;padding: 0 5px 0 12px;vertical-align: middle;color: #666;-webkit-transition: all .3s ease-in;-moz-transition: all .3s ease-in;transition: all .3s ease-in;}.tags-li:not(.active):hover {background: #f8f8f8;}.tags-li.active {color: #fff;}.tags-li-title {float: left;max-width: 80px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;margin-right: 5px;color: #666;}.tags-li.active .tags-li-title {color: #fff;}.tags-close-box {position: absolute;right: 0;top: 0;box-sizing: border-box;padding-top: 1px;text-align: center;width: 110px;height: 30px;background: #fff;box-shadow: -3px 0 15px 3px rgba(0, 0, 0, .1);z-index: 10;}</style>
在父组件中引入配置即可使用
Vue 封装面包屑 (即粘即用)相关推荐
- 在vue中使用element-ui二次封装面包屑导条
在vue中使用element-ui二次封装面包屑导条 由于这几天写了一个后台管理系统,多次使用的到了面包屑导航,所以我就把它封装起来使用了: 效果图 第一步 安装element-ui npm i el ...
- vue实战-面包屑的处理
vue实战-面包屑的处理 1.面包屑处理分类操作 在Search路由模块下 通过v-if来确定面包屑的存在,设置点击事件处理删除面包屑后的情况 <ul class="fl sui-ta ...
- 组件封装 - 面包屑组件
我们主要分为三个部分: 1. 初级的面包屑 2. 高阶的面包屑(过渡) 3. 高阶的面包屑(终极) 现在就来封装一个最简易的面包屑组件 简易面包屑只能兼容两级, 如果说有两级以上的; 这样的面包屑组件 ...
- vue 中面包屑带跳转的做法
首先要在子页面的meta中定义 {path: '/staffsManagement',component: () => import(/* webpackChunkName: "das ...
- vue动态面包屑导航
说明:根据不同的页面动态生成不同的面包屑导航 (不用在每个页面写死面包屑) router.js路由文件: {path:'/index',name:'index',component:()=>im ...
- Vue动态面包屑功能的实现方法
面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级. 今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能.以下案例都是使用 ...
- vue动态面包屑导航的使用
动态面包屑导航是根据路由中的 matched 获取到的 单独提取出面包屑导航栏组件 <template><el-breadcrumb class="app-breadcru ...
- vue--echarts 图标库、excel导出、面包屑组件、富文本框、地图、前端使用代理访问、监控生产环境or开发环境
目录 一.echarts 图标库 1.echarts的基础 2.项目中的使用 二.execl导出 三.面包屑组件 四.富文本框 五.地图 六.vite 构建配置 七.后端未开跨域资源共享,前端使用代理 ...
- vue3 - 仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件
仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件 element-ui 面包屑结构 <el-breadcrumb separator="/"&g ...
最新文章
- Python中线程Timeout的使用
- Asp.NET 获取网站根目录
- spring boot / cloud (二) 规范响应格式以及统一异常处理
- UI基础视图----UIImageView总结
- 关于用Delphi开发的一些基本的套路
- Linux和Windows下部署BeetleX服务网关
- ubuntu16.04下载caffe(CPU版本)及部分文件说明
- 大数据面试-02-大数据工程师面试题
- 【译】BMP格式与JPG格式之间的区别
- java无法启动安装程序,Windows Fix中无法启动Java更新安装程序错误
- Origin2018安装与使用(整理中)
- 奥维 html api,【教程】在奥维中,个人如何申请天地图API秘钥(手机端操作)
- 克利夫顿优势识别器 Clifton Strengths
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destinatio
- 用Auto.js批量删除空间说说
- 子比Zibll主题V6.3最新亲测免授权+可用版
- typescript 之 keyof
- Powershell 5.1中Shift + Insert无法粘贴解决
- def文件的作用及相关操作
- 软件设计师考试(2018下半年)
热门文章
- 完美图解教程 Linux环境VNC服务安装、配置与使用
- Spark RDD创建操作
- Facebook 开源了一整套重要的 Linux 内核组件与工具!
- JavaWeb学习总结(十二):Session
- python requests用法总结
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。...
- CentOS6部署phpmyadmin;部署Discuz;部署phpwind;部署phpBB
- 弗拉明戈舞_百度百科
- Android注册BroadcastReceiver的两种办法及其区别
- 重载session存储方式–session_set_save_handler()