Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!


2013年7月28日,尤雨溪第一次在 GItHub 上为 Vue.js 提交代码;2015年10月26日,Vue.js 1.0.0版本发布;2016年10月1日,Vue.js 2.0发布。

最早的 Vue.js 只做视图层,没有路由, 没有状态管理,也没有官方的构建工具,只有一个库,放到网页里就可以直接用了。

后来,Vue.js 慢慢开始加入了一些官方的辅助工具,比如路由(Router)、状态管理方案(Vuex)和构建工具(Vue-cli)等。此时,Vue.js 的定位是:The Progressive Framework。翻译成中文,就是渐进式框架。

Vue.js2.0 引入了很多特性,比如虚拟 DOM,支持 JSX 和 TypeScript,支持流式服务端渲染,提供了跨平台的能力等。Vue.js 在国内的用户有阿里巴巴、百度、腾讯、新浪、网易、滴滴出行、360、美团等等。

Vue 已是一名前端工程师必备的技能,现在就让我们开始深入学习 Vue.js 内部的核心技术原理吧!


什么是自定义指令

有关自定义指令的相关内容,请移步Vue 进阶系列丨自定义指令


适用业务场景

这里简单介绍一下,本篇文章主要解决的业务场景是什么样子的。

在后台管理平台中,我们的菜单权限是根据用户角色的不同动态变化的。

比如说,超级管理员能看到所有的菜单列表(这里说的菜单就是管理平台当中的侧边导航或顶部导航);普通用户只能看到首页等常见的菜单,对于权限比较高的页面,比如说机构管理、角色管理、用户管理等页面,普通用户是看不到的。

这个时候,前端针对菜单的权限,就要采取一些措施了,具体操作请移步Vue 进阶系列丨权限控制 addRoute()

我们这里要讲解的是,针对某个页面的按钮进行权限控制,比如说,角色A的用户拥有机构管理的新增、删除、编辑权限;角色B的用户,拥有机构管理的编辑权限。那么对于角色B的用户来说,机构管理页面中,新增和删除按钮应该是不可见的。这个时候,仅仅是菜单权限控制是满足不了此需求的。


实现步骤

1. 用户登录成功时,将用户权限数据,存入sessionStorage中

// login.vue
<script setup lang='ts'>import { useStore } from '@/store'const store = useStore()const login = ()=>{// 请求后台接口,拿到相关的用户权限数据getUserPermissionApi().then(res=>{sessionStorage.setItem('permission',res.data)// 示例: // 页面名称:按钮权限名// ['organization:add','organization:delete','organization:update']}).catch(err=>{console.log('拿到用户权限内容报错了')})}
</script>

1. 在项目根目录下新建一个 permission.ts 文件(这里是以vue-ts为例的)

// permission.ts// 引入vue中定义的指令对应的类型定义
import { Directive } from 'vue'
export const permission: Directive = {// 这是指令的一个生命周期mounted(el, binding) {// 获取用户使用自定义指令绑定的内容const { value } = binding;// 获取用户所有的权限const permissions = sessionStorage.getItem('permission')// 判断用户使用自定义指令,是否使用正确了if (value && value instanceof Array && value.length > 0) {// 判断传递进来的按钮权限,用户是否拥有const hasPermission = permissions.some((per) => {return value.includes(per)})if (!hasPermission) {// 当用户没有这个按钮权限时,隐藏这个按钮el.style.display = 'none'}} else {throw new Error('按钮权限指令示例: v-permission="['organization:add']"')}}
}// 注意,我们这里写的自定义指令,传递内容是一个数组,也就说,按钮权限可能是由
// 多个因素决定的,如果你的业务场景只由一个因素决定,自定义指令也可以不传递一个数组,
// 只传递一个字符串就可以了

3. 挂载到全局

// main.tsimport { createApp } from 'vue'
import App from './App.vue'
// 引用刚刚定义的自定义指令
import { permission } from './permission.ts'
// 注册自定义指令
createApp(App).directive('permission',permission)

4. 在页面中使用,这里我们在机构管理的页面中使用

// organization.vue<template><button v-permission="['organization:add']">新增按钮</button><button v-permission="['organization:update']">编辑按钮</button<button v-permission="['organization:delete']">删除按钮</button
</template>

5. 到这里,我们的自定义指令实现按钮权限的功能就已经实现了!


Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!

叶阳辉

HFun 前端攻城狮

往期精彩:

  • Vue 进阶系列丨Object 的变化侦测

  • Vue 进阶系列丨Array 的变化侦测

  • Vue 进阶系列丨虚拟DOM和VNode

  • Vue 进阶系列丨Patch 和模板编译

  • Vue 进阶系列丨事件相关的实例方法

  • Vue 进阶系列丨生命周期相关的实例方法

  • Vue 进阶系列丨生命周期

  • Vue 进阶系列丨自定义指令

  • Vue 进阶系列丨最佳实践

  • Vue 进阶系列丨Mixin 混入

  • Vue 进阶系列丨权限控制 addRoute()

  • Vue 进阶系列丨插槽

  • Vue 进阶系列丨npm发布vue组件

Vue 进阶系列丨自定义指令实现按钮权限功能相关推荐

  1. Vue 进阶系列丨权限控制 addRoute()

    Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的.若感本文对您有所帮助请点个赞吧! 2013年7月28日,尤雨溪第一次 ...

  2. Vue 进阶系列丨vuex持久化

    Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的.若感本文对您有所帮助请点个赞吧! 2013年7月28日,尤雨溪第一次 ...

  3. Vue 进阶系列丨生命周期

    Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的.若感本文对您有所帮助请点个赞吧! 2013年7月28日,尤雨溪第一次 ...

  4. Vue使用自定义指令实现按钮防抖功能,防止多次调接口

    首先什么是防抖? 防抖就是指☞触发事件后在n秒内函数只执行一次,如果在n秒内又触发了事件,则会重新计算函数执行时间.说到防抖大家应该会想到节流,两者cp哈哈哈. 主要应用场景有: a.scroll事件 ...

  5. Vue 进阶系列(一)之响应式原理及实现

    Vue进阶系列汇总如下,欢迎阅读. Vue 进阶系列(一)之响应式原理及实现 Vue 进阶系列(二)之插件原理及实现 Vue 进阶系列(三)之Render函数原理及实现 什么是响应式Reactivit ...

  6. Vue项目中的自定义指令

    Vue项目中的自定义指令 使用场景:需要对DOM元素进行底层操作 局部自定义指令 当指令第一次被绑定到元素上的时候,会立即触发 bind() 1 定义 与 data 同级 在 directives 节 ...

  7. Vue.js中的自定义指令directives

    除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.自定义指令,需要声明钩子函数.注册自定义指令也分为注册全局自定义指令和注册局部自定义指令.两者用法相同, ...

  8. vue自定义指令实现按钮界别权限管理

    在后台管理系统中,每个用户权限都往往需要严格分配,某些可能只具有某个列表的查看功能而没有编辑功能,这就需要对后台管理系统的每个按钮进行权限管理 自定义指令管理权限原理: 1.自定义指令,根据标签参数实 ...

  9. Vue自定义指令实现按钮级权限

    在很多后台管理系统中,常常需要做按钮权限控制. 当然我们可以使用v-if来实现,不过这样做,每个页面都要获取一次权限信息,代码往往很冗余. 接下来我们将封装自定义指令,来实现按钮级的权限控制. 一.先 ...

最新文章

  1. sql server 2008建域时提示admin密码不符合要求解决方法
  2. Lucene入门的基本知识(四)
  3. 傅里叶,请再帮我们一次吧....
  4. 逻辑设计中复位的稳妥处理方法?
  5. java下发报文_java报文的发送和接收 | 学步园
  6. Win11系统如何解除网络限制
  7. 使用ACDsee在一张纸上打印多张图片
  8. STM32-SPI通信
  9. EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............
  10. pythonATM,购物车项目实战_补充6-lib模块
  11. php yyuc框架,求一份YYUC框架文件和帮助文档
  12. vue中打印表格功能(重点是表格制作)
  13. 查看python源码位置方法以及潜在误区
  14. Raid5磁盘阵列数据恢复,服务器raid数据恢复步骤和方法
  15. Java面试快问快答-Instrument机制
  16. USB转RS422/485/232串口线异常问题记录
  17. Windows NTSTATUS Values 进程终止消息标识符
  18. UnavailableInvalidChannel: The channel is not accessible or is invalid. channel name: conda-forg ch
  19. VXE-TABLE V4 表格表尾合并
  20. sync failed 错误 springboot

热门文章

  1. STM32+ze-08甲醛传感器使用教程
  2. 4399公司2017秋招前端笔试试卷
  3. ANDROID项目中嵌入高德地图(一)配置环境+显示地图
  4. 【科研划水向】如何在学术讲座高质量提问/如何有效地听一个学术讲座?
  5. 2019杭电多校第一场 HDU 6599
  6. 2020-03-25阅读笔记-虚拟学习社区中隐性知识传播研究
  7. 【CVPR 2021】剪枝篇(一):Network Pruning via Performance Maximization
  8. 软件测试 - 基础理论篇
  9. ffmpeg硬编解码 Inter QSV
  10. 蓝桥杯算法训练合集一 1.印章2.拿金币3.数字游戏4.无聊的逗5.礼物