vue3用户权限管理(导航栏权限控制)2

简介: 上一节我们说到,通过后端的用户权限来进行路由的动态添加,实现权限控制,这一节我们通过递归导航栏组件,实现后台权限控制导航栏,接上一节所说我们在vuex中存储了一个路由数组["/","*"]进行权限控制,这一节还是要使用这个路由数组进行导航栏的控制,开始吧。

上一节我们说到,通过后端的用户权限来进行路由的动态添加,实现权限控制,这一节我们通过递归导航栏组件,实现后台权限控制导航栏,接上一节所说我们在vuex中存储了一个路由数组["/","*"]进行权限控制,这一节还是要使用这个路由数组进行导航栏的控制,开始吧。

1,下载安装element-plus

       image.gif编辑

2,在main.ts里导入

image.gif

3.使用element-plus的导航栏组件

        这里要注意下,导航栏的代码都要抽离出来单独进行处理image.gif

4.创建一个导航栏组件,将导航栏组件抽取出来

   在views里新建一个导航栏组件,取名NavList.vue,将我们的导航栏组件拿出来

   image.gif编辑

在navList组件里写如下代码,进行递归

<template>
    <div>
        <el-sub-menu v-if="menu.children" :index="menu.path"> //3,判断传入的路由表中是否有子路由
            <template #title>{{menu.name}}</template> 
            <Nav-list v-for="(item,index) in menu.children" :key="index" :menu="item"></Nav-list> //5.这里是判断,如果有子路由,也就是有二级导航
            //时,直接调用自身递归,在次循环二级导航,看是否有三级路由或者时有没有其他的内容,在把二级导航的内容通过menu传入到组件再次进行循环拆分,知道最后一层
        </el-sub-menu>
        <el-menu-item v-else :index="menu.path"> //4.如果没有子路由,就代表着没有下级导航,就直接渲染即可,
            <span >{{menu.name}}</span>
        </el-menu-item>
    </div>
</template>
<script lang="ts">
import {defineComponent} from "vue"
    export default defineComponent({
        name:"NavList",//给组件定义好name方便自己调用自己
        props:{
            menu:Object,//1.获取在父组件中传入的路由信息
        },
        setup(props) {
            const {menu}:any= props
            return {
                menu//2.导出供页面渲染递归
            }
        },
        components:{
        }
    })
</script>

image.gif

最后我们将这个组件导入到我们的主页组件里 nav.vue

<template>
    <div>
        <el-row>
            <el-col :span="12">
                <el-menu :router="true"> //3.导航栏组件都需要写el-menu
                    <Nav-list v-for="(item,index) in nav" :key="index" :menu="item"></Nav-list>//4.将我们筛选过的动态路由数据,通过循环组件,然后把每一项都传递进去,给组件筛选递归
                </el-menu>
            </el-col>
        </el-row>
        <el-button>头部</el-button>
        <router-view></router-view>
        <el-button>尾部</el-button>
    </div>
</template>
<script lang="ts">
import nav from "./nav"  //1.获取筛选过的路由表,这里我就简写一下了,一般就是我们通过后端传入的["/","*"]对动态路由筛选过后的新的动态路由,和上一节路由权限控制,通过addrouter导入的内容一致
import NavList from "./NavList.vue"  //2.导入我们封装的递归导航组件
import {defineComponent} from "vue"
    export default defineComponent({
        setup() {
            return {
                nav
            }
        },
        components:{
            NavList
        }
    })
</script>
<script scoped>
</script>

image.gif

这样即可以实现,动态控制导航栏,从,登录--获取token---token存本地存储---vuex调用本地存储的token---在vuex里通过token获取到路由数组---在将获取到的路由数组存放在state里----在主页里获取我们定义好的动态路由----将获取到的路由数组和动态路由做筛选,选出符合数组里的路由---将处理好的路由循环到我们的路由递归组件里。这样就实现了通过后端的权限来控制导航栏.

动态路由信息

export default [
    {
        name:"首页",
        path:"/home"
    },
    {
        name:"人员管理",
        Path:"/personnel",
        children:[
            {
                name:"人员列表",
                url:"/personnel/list"
            }
        ]
    }
]

image.gif

nav.vue 主页面组件,引入navlist.vue递归组件。

相关文章
|
12天前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
384 139
|
7天前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
71 1
|
1月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
256 12
|
5月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
854 5
|
22天前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
162 0
|
2月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
355 1
|
2月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
192 0
|
3月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
117 0
|
5月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
487 17
|
5月前
|
JavaScript 前端开发 API
Vue 2 与 Vue 3 的区别:深度对比与迁移指南
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,在过去的几年里,Vue 2 一直是前端开发中的重要工具。而 Vue 3 作为其升级版本,带来了许多显著的改进和新特性。在本文中,我们将深入比较 Vue 2 和 Vue 3 的主要区别,帮助开发者更好地理解这两个版本之间的变化,并提供迁移建议。 1. Vue 3 的新特性概述 Vue 3 引入了许多新特性,使得开发体验更加流畅、灵活。以下是 Vue 3 的一些关键改进: 1.1 Composition API Composition API 是 Vue 3 的核心新特性之一。它改变了 Vue 组件的代码结构,使得逻辑组
1590 0