【Vue2+Element ui通用后台】面包屑和tag功能

这篇具有很好参考价值的文章主要介绍了【Vue2+Element ui通用后台】面包屑和tag功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面包屑

Element ui 面包屑:显示当前页面的路径,快速返回之前的任意页面,完成效果如下:
vue2面包屑,Vue学习笔记,vue.js,elementui

我们之前把头部的代码封装到了 CommonHeader.vue 中,面包屑部分直接写死了一个首页,我们可以把官网的面包屑代码先直接复制过来:

<el-breadcrumb separator="/">
        <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item><a href="/">活动管理</a></el-breadcrumb-item>
        <el-breadcrumb-item>活动列表</el-breadcrumb-item>
        <el-breadcrumb-item>活动详情</el-breadcrumb-item>
</el-breadcrumb>

之前我们在 store/tab.js 中我们写了头部的是否开关,这里我们增加面包屑的数据。我们点击左侧菜单,面包屑会依次展示菜单内容,所以数据结构和菜单差不多,我们直接复制菜单的数据

export default {
    state:{
        isCollapse:false,//控制菜单展开/收起
        tabList:[
            {
                path: '/',
                name: 'home',
                label: '首页',
                icon: 's-home',
                url: 'Home/home'
            },
        ]//面包屑数据
    },
    mutations:{
        ......
    }
}

当点击左侧菜单时,面包屑的内容相应修改,所以我们修改 CommonAside.vue ,之前已经有点击菜单的方法,我们修改 menuClick,使用 this.$store.commit 来调用 selectMenu 方法,然后传入点击菜单的数据

menuClick(item) {
      ......
      this.$store.commit('selectMenu',item)
}

我们在 tab.js 中增加 selectMenu 方法

// 更新面包屑数据
        selectMenu(state,val){
            // 判断添加数据是否为首页
            if(val.name !== 'home'){
                // 判断如果不存在
                const index = state.tabList.findIndex(item => item.name === val.name )
                // 如果不存在
                if(index === -1){
                    state.tabList.push(val)
                }
            }
        }

由于面包屑默认数据就是首页,所以 selectMenu 方法先判断是不是首页,不是首页再执行下面的代码

然后判断 tabList 中是否存在所点击的菜单数据,如果存在就没有必要重复添加。是否存在可以使用 findIndex,传入一个函数,如果存在则返回一个索引,如果不存在返回 -1

接下来我们在 CommonHeader.vue 中使用面包屑数据,当然我们可以使用this.$store.state.tab.tabList来获取,我们学习一个更简单的方法,使用 mapstate

在这里插入代码片

tags 是我们起的数据别名,后边跟一个函数,返回的就是我们需要的数据,由于返回的是一个对象,我们使用扩展运算符 ...将 mapState 进行结构

然后面包屑内容使用 v-for 循环 tags 即可

<el-breadcrumb separator="/">
	<el-breadcrumb-item v-for="item in tags" :to="{ path: item.path }">{{item.label}}</el-breadcrumb-item>
</el-breadcrumb>

样式需要进行修改
vue2面包屑,Vue学习笔记,vue.js,elementui
修改哪个 class 可以查看元素
vue2面包屑,Vue学习笔记,vue.js,elementui

<template>
  <div class="header-container">
    <div class="l-content">
      <el-button style="margin-right: 20px" icon="el-icon-menu" size="mini" @click="handleMenu"></el-button>
      ......
    </div>
    ......
  </div>
</template>

......

<style lang="less" scoped>
.header-container {
   ......
  .l-content{
    display: flex;
    align-items: center;
    /deep/.el-breadcrumb__item{
      .el-breadcrumb__inner{
        font-weight: normal;
        &.is-link{
          color: #666666;
        }
      }
      &:last-child{
        .el-breadcrumb__inner{
          color: #ffffff;
        }
      }
    }
  }
}
</style>

tag

Element ui Tag

tag 功能展示如下,点击左侧路由,tag 增加,点击相应 tag 跳转对应路由,tag 可以删除
vue2面包屑,Vue学习笔记,vue.js,elementui

我们把这个功能封装成组件,在 components 下新建 CommonTag.vue,代码如下:

<template>
  <div class="tabs">
    <el-tag
        v-for="(item,index) in tags"
        :key="item.path"
        :closable="item.name !== 'home'"
        :effect="$route.name === item.name?'dark':'plain'"
        size="small"
        @click="handleClick(item)"
        @close="handleClose(item,index)">
      {{ item.label }}
    </el-tag>
  </div>
</template>

<script>
import { mapState,mapMutations } from 'vuex'
export default {
  name:'CommonTag',
  data(){
    return {}
  },
  computed:{
    ...mapState({
      tags: state => state.tab.tabList
    })
  },
  methods:{
    ...mapMutations(['closeTag']),
    handleClick(item){
      this.$router.push({name:item.name});
    },
    handleClose(item,index){
      // 调用store中的mutation,删除点击的项
      this.closeTag(item)
      // 删除后的tags长度
      const length = this.tags.length;
      // 删除之后的跳转逻辑
      // 1、如果不是删除的当前路由。根据name判断是否相等。当前路由不一定是最后一个
      if(item.name !== this.$route.name){
        // 那么直接删除该项即可
        return
      }
      // 2、如果删除的当前路由,即选中的tag
      // 2.1 当前路由在最后,也就是删除最后一项
      if(index === length){
        // 那么需要跳转到前一项
        this.$router.push({
          name: this.tags[index -1].name
        })
      }else{
        // 2.2 当前路由不在最后一项
        // 那么跳转到后一项
        this.$router.push({
          name: this.tags[index].name
        })
      }
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less" scoped>
.tabs{
  padding: 20px;
  .el-tag{
    margin-right: 15px;
    cursor: pointer;
  }
}
</style>

我们直接复制 Element UI 中的 tag 代码复制过来,因为数据和面包屑的内容是一样的,所以我们可以直接获取 vuex 中的面包屑数据,进行 v-for 循环即可

closable 设置是否可关闭,首页不可关闭,其他都可以

effect 设置主题,如果是当前路由则使用深色主题

因为使用了$route.name === item.name?'dark':'plain' 即路由name 是否和当前 tag name 相同,所以 router / index.js 中需要给路由添加 name 属性

//2、将路由与组件进行映射
const routes = [
    {
        //主路由
        path: '/',
        component: Main,
        redirect: '/home',
        children: [
            {path: 'home', name: 'home', component: Home},// 主页
            {path: 'user', name: 'user', component: User},// 用户管理
            {path: 'mall', name: 'mall', component: Mall},// 商品管理
            {path: 'page1', name: 'page1', component: PageOne},// 页面1
            {path: 'page2', name: 'page2', component: PageTwo},// 页面2
        ]
    }
]

然后实现点击事件,点击相应 tag 应该跳转到相应路由。在 tag 上增加 click 事件,传入数据,加入路由即可

点击删除按钮有一个相应的事件(看官方文档最后),在 tag 上增加 close 事件。功能相对复杂,需要分为几种情况,注释中都有

删除数据本质上是删除 tabs.js 中的 tabList 数据,所以修改 tabs.js

import {findIndex} from "core-js/internals/array-iteration";

export default {
    state:{
        isCollapse:false,//控制菜单展开/收起
        tabList:[
            {
                path: '/',
                name: 'home',
                label: '首页',
                icon: 's-home',
                url: 'Home/home'
            },
        ]//面包屑数据
    },
    mutations:{
        ......
        // 删除指定的 tag 数据,第一个参数是固定的
        closeTag(state,item){
            const index = state.tabList.findIndex(val=>val.name === item.name);
            state.tabList.splice(index,1);
        }
    }
}

1、删除的不是当前路由
vue2面包屑,Vue学习笔记,vue.js,elementui
2、删除的是当前路由,当前路由在最后

vue2面包屑,Vue学习笔记,vue.js,elementui
3、删除的是当前路由,当前路由在中间
vue2面包屑,Vue学习笔记,vue.js,elementui文章来源地址https://www.toymoban.com/news/detail-787162.html

到了这里,关于【Vue2+Element ui通用后台】面包屑和tag功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UI组件-面包屑简介

    设计世界充满了与食物相关的类比,例如汉堡菜单、Snackbars或面包屑。面包屑或面包屑路径是一种导航元素,可帮助用户了解他们在网站上的当前位置。 1. 定义: 它们代表链接的水平列表,其中最后一个表示当前位置,其余定义其“祖先”(父页面、祖父页面等)。面包屑

    2024年02月06日
    浏览(28)
  • Vue + ElementUI 动态生成面包屑导航教程

    在Web应用程序中,面包屑导航是一种常用的导航方式,它可以帮助用户更好地理解当前页面的位置和层次关系。在Vue项目中,结合ElementUI组件库,我们可以很容易地实现一个动态生成面包屑导航的功能。本教程将介绍如何使用Vue + ElementUI来实现动态生成面包屑导航的功能。

    2024年02月06日
    浏览(38)
  • Vue实现面包屑功能(el-breadcrumb)

    文章后面附效果图 数据结构 首先展示一下数据基础结构 红色框框是默认存在的数据,其他数据就是通过选中侧边栏菜单进行数据插入 关键数据字段为 path, meta 准备侧边栏 首先需要自己准备一个侧边栏 这边就不进行讲解,上个效果图 实现面包屑代码 效果图

    2024年02月11日
    浏览(27)
  • 【Vue2+Element ui通用后台】菜单权限

    对于菜单权限我们需要解决以下问题: 1、不同的账号登录,有不同的菜单 2、通过输入url地址来显示页面,所以应该根据权限动态注册路由 3、对于菜单数据,在不同页面之间的数据通信 现在项目中的菜单,我们是在 CommenAside 中写死的,现在我们需要根据登录后返回的权限

    2024年02月07日
    浏览(24)
  • 若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起

    因为是在vue源码的基础上进行修改,所以,就没有复制代码在文章上,采取的是截图对比源码和我修改的代码片段。要麻烦你们自己手敲了。 场景:在费用配置列表中,点击每一项的配置,都会在页面容器内部打开一个新页面,所以新页面的路径一样,根据传的参数不同,面

    2024年01月16日
    浏览(41)
  • [VUE学习]权限管理系统前端vue实现9-动态路由,动态标签页,动态面包屑

                    在总体布局页面添加router router-view 是 Vue Router 提供的组件,用于动态展示匹配到的路由组件内容。 通过在合适的位置放置 router-view ,你可以根据路由路径动态地渲染对应的组件内容。                     因为我们是多级页面 之后动态路由也是多级的 如

    2024年02月13日
    浏览(35)
  • 【Vue项目搭建】修改【若依框架】的侧边栏、导航栏、面包屑样式、修改全局页面样式

    掌握分寸感,找目标一致的人协同你,有效地调配资源,就可以提高效率。 写在前面的话 :博主最近想要搭建自己的前端若依项目,因此此系列博客会做一些记录。我的项目gitee地址: https://gitee.com/xuruicong/rachel-front-show 说明:只运行前端项目,只需要要下载官方项目http:

    2024年01月19日
    浏览(74)
  • js面包屑,如何制作面包屑,什么是面包屑,又如何去理解面包屑是什么呢,对于不会应该怎么办呢?这篇文章告诉你。

    🙂博主:锅盖哒 🙂文章核心: 带你了解原生js面包屑框架 目录大纲 1.面包屑的概念与框架地址 2.功能框架预览于介绍 框架效果预览: 页面架构代码预览: HTML页面预览:  权限验证介绍 3.面包屑的逻辑  下面就是面包屑逻辑 1.首先从login页面进入拿到渲染左侧列表的值 2

    2024年02月14日
    浏览(35)
  • 【Vue2+Element ui通用后台】整体布局、数据展示、axios封装

    我们新建 Home 组件来展示右侧的内容 整体布局我们使用layout布局,通过基础的 24 分栏,迅速简便地创建布局。由于左侧占比较小,我们分为 8 和 16 即可 然后每个卡片样式的部分,我们使用 Card 卡片 我们先增加一个个人信息的展示: 然后在App.vue 中给 p 标签去掉默认样式 在

    2024年02月14日
    浏览(24)
  • 利用Bootstrap的面包屑组件实现面包屑层次分级导航效果

    可以用类breadcrumb实现面包屑层次导航效果。 当使用 Bootstrap 构建网页时, breadcrumb 类用于创建面包屑导航(breadcrumb navigation),这是一种可视化导航元素,通常用于指示用户当前页面在网站层次结构中的位置。面包屑导航以层次结构形式显示,通常采用类似 “Home Products Ca

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包