elementUI+vue-router实现组件动态面包屑导航

vue-cli项目中—根据路由变换的动态面包屑导航

1、在src文件夹下的router/index.js中配置路由

const routerMap = [
    {
        path: '/',
        redirect: 'dashboard',
        component: Layout,
        name:'Dashboard',
        children: [
            {
                path: 'dashboard',
                component: () => import('@/view/dashboard'),
                name: 'Dashboard',
                meta: { title: 'dashboard', icon: 'dashboard', noCache: true }
            }
        ]
    },{
        path:'/test',
        component:Layout,
        redirect: '/test/index',
        name:'Test',
        meta:{title:'test',icon:'lock'},
        children:[
            {
                path:'index',
                component:()=>import('@/view/test'),
                name:'test',
                meta:{title:'test', icon: 'example', noCache: true }
            },{
                path:'example',
                component:()=>import('@/view/test/example'),
                name:'example',
                meta:{title:'example',icon:'404'}
            }
        ]
    }
]

2、面包屑组件封装

<template>
    <div class="navbar clearfix">
        <el-breadcrumb class="breadcrumb-container" separator-class="el-icon-arrow-right">
            <el-breadcrumb-item v-for="item in levelList":key="item.path" :to="item.path">{{item.meta.title}}</el-breadcrumb-item>
        </el-breadcrumb>
    </div>
</template>

<script>
    export default {
        name: 'Navbar',
        data() {
            return {
                levelList: []
            }
        },
        watch: {
            $route() {
                this.getBreadcrumb()
            }
        },
        created(){
            this.getBreadcrumb()
        },
        methods:{
            getBreadcrumb() {
                //$route.matched一个数组 包含当前路由的所有嵌套路径片段的路由记录
                let matched = this.$route.matched.filter(item => item.name)
                const first = matched[0];
                if (first && first.name.trim().toLocaleLowerCase() !== 'Dashboard'.toLocaleLowerCase()) {
                    matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)
                }
                this.levelList = matched
            }
        }
    }
</script>

3、页面中使用面包屑导航组件

<template>
  <div>
    <!-- 用户组--管理 -->
    <breadcrumb></breadcrumb>
  </div>
</template>

<script>

// 引入【面包屑导航】组件
import Breadcrumb from '../../components/breadcrumb/index'

export default {
    components:{
        Breadcrumb
    }

}
</script>

 

### 回答1: 抱歉,由于提供完整的代码涉及到多个文件和组件,无法在此回答。不过,我可以为您提供一个基本的代码框架和思路: 1. 在 Spring Boot 中创建一个 REST API 服务,用于获取动态路由信息并返回给前端。可以使用 Spring Security 管理权限。 2. 在前端使用 Vue.js 和 ElementUI 创建页面,使用 Vue Router 管理路由,包括静态路由动态路由。 3.Vue.js 中,使用 axios 发送请求到后端获取动态路由信息,并将其添加到路由配置中。 4.ElementUI 中,可以使用菜单组件面包屑组件展示路由信息,方便用户导航。 需要注意的是,动态路由实现需要前后端共同配合,后端提供动态路由信息接口,前端调用接口并根据返回结果动态生成路由。由于每个项目的实现细节和逻辑都可能不同,因此需要具体情况具体分析,这里提供的只是一个大致的思路和框架。 ### 回答2: Vue + ElementUI + SpringBoot + MySQL 实现动态路由的全部代码示例如下: 1. Vue 前端代码: ```javascript // 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' // 导入路由配置 import axios from 'axios' Vue.config.productionTip = false Vue.use(ElementUI) Vue.prototype.$axios = axios new Vue({ router, render: h => h(App) }).$mount('#app') ``` ```html <!-- App.vue --> <template> <div id="app"> <router-view></router-view> </div> </template> <script> export default { name: 'App' } </script> ``` ```javascript // router.js import Vue from 'vue' import VueRouter from 'vue-router' import axios from 'axios' import { Message } from 'element-ui' Vue.use(VueRouter) const routes = [ { path: '/', name: 'Home', component: () => import('@/views/Home.vue') }, // 其他路由配置... ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) // 动态路由获取示例 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth) { // 路由需要权限验证 axios.get('/api/checkAuth').then(response => { if (response.data.success) { next() } else { Message.error('需要登录') next('/login') } }) } else { // 其他路由直接放行 next() } }) export default router ``` 2. SpringBoot 后端代码: ```java // AuthController.java @RestController @RequestMapping("/api") public class AuthController { @GetMapping("/checkAuth") public ResponseEntity<?> checkAuth() { // 检查权限的逻辑 // 返回一个标志,表示是否有权限 return ResponseEntity.ok().body(new ApiResponse(true, "权限验证通过")); } } ``` 3. MySQL 数据库表设计: ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `role_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `FK_user_role_user` (`user_id`), KEY `FK_user_role_role` (`role_id`), CONSTRAINT `FK_user_role_role` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`), CONSTRAINT `FK_user_role_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 以上是基于 VueElementUI、SpringBoot 和 MySQL 实现动态路由的一个简单示例代码。具体的实现逻辑和业务需求可以根据实际情况进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值