vue+elementUI动态生成面包屑导航

在这里插入图片描述
项目需要动态生成面包屑导航,并且首页可以点击.其余为路径显示

<el-menu :unique-opened="true" router :default-active="$route.path" @select="handleSelect">
        <div class="user-menu-box" v-for="menu in menus" :key="menu.id">
            <el-menu-item v-if="!menu.child" :index="menu.path">
                <icon :name="menu.icon" :w="20" :h="20"></icon>
                <span slot="title" v-text="menu.name"></span>
            </el-menu-item>
            <el-submenu v-if="menu.child" :index="menu.path">
                <template slot="title">
                    <icon :name="menu.icon" :w="20" :h="20"></icon>
                    <span slot="title" v-text="menu.name"></span>
                </template>
                <el-menu-item-group>
                    <el-menu-item v-for="subMenu in menu.child" :key="subMenu.id" v-text="subMenu.name"
                        :index="subMenu.path"></el-menu-item>
                </el-menu-item-group>
            </el-submenu>
        </div>
</el-menu>

上面的代码是elementUI组件的样式,根据项目需要做了修改,搬运的时候根据项目自己改改

export default {
    data () {
        return {
            activeMenu: '',
            indexBreadcrumbs: [],
            menus: [{
                id: '1',
                name: '门户管理',
                icon: 'menhuguanli',
                path: '#2',
                child: [{
                    id: '1-1',
                    name: '轮播图',
                    path: '/backstage/protaManage/turns'
                }, {
                    id: '1-2',
                    name: '基础数据',
                    path: '/backstage/protaManage/basis'
                }, {
                    id: '1-3',
                    name: '分类管理',
                    path: '/backstage/protaManage/classify'
                }, {
                    id: '1-4',
                    name: '内容发布',
                    path: '/backstage/protaManage/content'
                }]
            }, {
                id: '2',
                name: '我的云盘',
                icon: 'yunpan',
                path: '/backstage/yunManage'
            }, {
                id: '3',
                name: '管理菜单',
                icon: 'shezhi',
                path: '/backstage/menusManage'
            }, {
                id: '4',
                name: '编辑板块',
                icon: 'fabuzhongxin',
                path: '/backstage/editPlate'
            }]
        }
    },
    watch: {
        $route () {
            this.handChange()
        }
    },
    computed: {
        breadcrumbList () {
            let breadcrumbs = []
            let menuList = this.menus
            this.indexBreadcrumbs.map(item => {
                for (let i = 0; i < menuList.length; i++) {
                    if (item === menuList[i].path) {
                        breadcrumbs.push(menuList[i])
                        if (menuList[i].child) {
                            menuList = menuList[i].child
                        }
                        break;
                    }
                }
            })
            return breadcrumbs
        }
    },
    methods: {
        handChange () {
            this.$emit('hand-change', this.breadcrumbList)
        },
        handleSelect (index, indexPath) {
            this.indexBreadcrumbs = indexPath
        }
    },
    created () {
        this.handChange()
    }
}

上面的代码是模拟的数据,调用elememtUI的组件导航菜单的中的@select方法,有两个参数,可以自行打印
在这里插入图片描述
然后在computed中计算当前选中的是哪一部分,取到返回值,然后$emit传给父组件,

<el-breadcrumb separator-class="el-icon-arrow-right">
     <el-breadcrumb-item :to="{ path: '/backstage' }">首页</el-breadcrumb-item>
     <el-breadcrumb-item v-for="o in breadcrumbList" :key="o.id">{{o.name}}
     </el-breadcrumb-item>
 </el-breadcrumb>

父组件中取到子组件传过来的值后,直接渲染就行了

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值