后管实现面包屑功能

面包屑实现动态与静态看需求咯
如下所示:

面包屑

one方法 1

面包屑点击title显示进行替换(不可点击)

面包屑点击title显示进行替换(不可点击)
这种根据路由的meta值来判断
涉及2个页面
1 router.js
2 面包屑独立文件

效果图

在这里插入图片描述

router.js

在这里插入图片描述

在这里的name下都要加入
 meta: { title: '' },
面包屑独立文件
直接copy用
!<template>
<!-- 常见的面包屑 -->
  <div>
  <el-breadcrumb eparator="/">
  <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
 <el-breadcrumb-item v-for="(item, index) in breadList" :key="index">{{item.meta.title}}</el-breadcrumb-item>
</el-breadcrumb>
  </div>
</template>
<script>
export default {
data(){
  return{
     breadList: []
  }
},
watch:{
  $route(val) {
      this.getBreadcrumb(val);
    }
},
 methods: {
    getBreadcrumb(val) {
      if (val.matched) {
         let matched = val.matched.filter(item => item.meta && item.meta.title);
        this.breadList = matched;
      }
    }
  }
}
</script>
<style>
</style>

two方法 2

面包屑点击title显示进行叠加(可点击)

 面包屑点击title显示进行叠加(可点击)
触及到文件
1 router.js
2 store.js
3 面包屑文件(放在首页里面)
4 侧边栏独立文件

效果图

在这里插入图片描述

router.js
路由文件
这里对应的路由的各个name需要与侧边栏对应写的你name保持一致

在这里插入图片描述

store.js
这个是vuex里使用的文件
这里的是tab.js做了拆分如下所示

在这里插入图片描述

里面内容所示
这里的内容可以直接copy
export default {
    state:{
        tabList:[
            // 拿到首页的数据初始化显示home
            {
                id: 1,
                path: "/index",
                name: "AdminIndex",
                //这里的name值与router的保持一致
                nameZh: "首页",
                icon: "el-icon-menu",
                component: "AdminIndex",
              },
        ],
        currentMenu: null//初始化侧边栏的值为null
    },
    mutations:{
        // 判断选中的值状态
        selectMenu(state,val){
            if(val.name !== 'AdminIndex'){//对应的title的name
                state.currentMenu = val
                // 查找选中的是否索引值一致 进行单个添加
                const result = state.tabList.findIndex(item => item.name === val.name)
                if(result === -1){
                    state.tabList.push(val)
                }
            }else{
                state.collapseMenu = null  
            }
        },
        // 判断关闭的状态
        closeTag(state,val){
            // 查找选中的是否索引值一致 进行单个删除
            const result = state.tabList.findIndex(item => item.name  === val.name )
            state.tabList.splice(result, 1)
        }
    },
}
面包屑文件
//html

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

//js
import { mapState } from "vuex";


  computed: {
    ...mapState({
      tags: (state) => state.tab.tabList,
    }),
  },
就可
侧边栏独立文件
需要在如下所示加入点击事件

在这里插入图片描述

我这里的侧边栏使用递归只需要在子里面加入这个点击事件

在这里插入图片描述

//然后点击事件里面的方法写这种
methods: {
     clickMenu(item) {
       console.log(item)
        this.$router.push({
            name: item.name
        })
        this.$store.commit('selectMenu', item)
    }
  },

three方法 3

面包屑点击title显示进行叠加带删除(可点击)

面包屑点击title显示进行叠加带删除(可点击)

这种根据路由的name相同来判断
触及到文件
1 router.js
2 store.js
3 面包屑独立文件
4 侧边栏独立文件

效果图

在这里插入图片描述

router.js
路由文件
这里对应的路由的各个name需要与侧边栏对应写的你name保持一致

在这里插入图片描述

store.js
这个是vuex里使用的文件
这里的是tab.js做了拆分如下所示

在这里插入图片描述

里面内容所示
这里的内容可以直接copy
export default {
    state:{
        tabList:[
            // 拿到首页的数据初始化显示home
            {
                id: 1,
                path: "/index",
                name: "AdminIndex",
                //这里的name值与router的保持一致
                nameZh: "首页",
                icon: "el-icon-menu",
                component: "AdminIndex",
              },
        ],
        currentMenu: null//初始化侧边栏的值为null
    },
    mutations:{
        // 判断选中的值状态
        selectMenu(state,val){
            if(val.name !== 'AdminIndex'){//对应的title的name
                state.currentMenu = val
                // 查找选中的是否索引值一致 进行单个添加
                const result = state.tabList.findIndex(item => item.name === val.name)
                if(result === -1){
                    state.tabList.push(val)
                }
            }else{
                state.collapseMenu = null  
            }
        },
        // 判断关闭的状态
        closeTag(state,val){
            // 查找选中的是否索引值一致 进行单个删除
            const result = state.tabList.findIndex(item => item.name  === val.name )
            state.tabList.splice(result, 1)
        }
    },
}
面包屑独立文件
这里我们独立开一个文件 然后在首页的header里面引入
里面内容如下
<template>
    <div class="tabs">
        <el-tag 
            v-for="(tag, index) in tags"
            :key="tag.name"
             type="danger"
            :closable="tag.name !== 'AdminIndex'"
            :effect="$route.name === tag.name ? 'dark' : 'plain'"
            @click="changeMenu(tag)"
            @close="handleClose(tag, index)"
            size="small">
            {{ tag.nameZh }}
        </el-tag>
    </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'
    export default {
        name: 'CommonTag',
        data () {
            return {
                
            }
        },
        methods: {
            ...mapMutations({
                close: 'closeTag'
            }),
            changeMenu(item) {
                this.$router.push({
                    name: item.name
                })
            },
            handleClose(tag, index) {
                const length = this.tags.length - 1
                this.close(tag)
                if (tag.name !== this.$route.name) {
                    return;
                }
                if (index === length) {
                    this.$router.push({
                        name: this.tags[index - 1].name
                    })
                } else {
                    this.$router.push({
                        name: this.tags[index].name
                    })
                }
            }
        },
        computed: {
            ...mapState({
                tags: state => state.tab.tabList//默认显示首页
            })
        }
    }
</script>
<style scoped>
    .tabs {
        padding:5px  10px;
        text-align: left;
        margin: -14px -20px 10px -20px;
        background-color: #fff;
    }

    .tabs .el-tag {
        margin-right: 10px;
        cursor: pointer;
    }
</style>
侧边栏独立文件
需要在如下所示加入点击事件

在这里插入图片描述

我这里的侧边栏使用递归只需要在子里面加入这个点击事件

在这里插入图片描述

//然后点击事件里面的方法写这种
methods: {
     clickMenu(item) {
       console.log(item)
        this.$router.push({
            name: item.name
        })
        this.$store.commit('selectMenu', item)
    }
  },

具体看本人码云项目 分支dev1

参考github

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值