首页 > 其他分享 >Vue:TDesign Starter 自定义指令控制权限

Vue:TDesign Starter 自定义指令控制权限

时间:2023-01-06 19:44:06浏览次数:67  
标签:TDesign Vue 自定义 el 指令 role 权限

Vue 支持自定义指令,具体API说明可以参考下面两个文档:

1. 钩子函数

Vue.directive 提供了几个钩子函数,分别是:

  • bind
  • inserted
  • update
  • componentUpdated
  • unbind

具体是的说明可以参考钩子函数

自定义指令控制权限用的是inserted,它表示被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

2. 函数参数

指令的钩子函数会回传3个参数(componentUpdated、unbind是4个):

  • el:指令所绑定的元素,可以用来直接操作 DOM
  • binding:一个对象,包含指令的各种属性
  • vnode:Vue 编译生成的虚拟节点
  • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用

自定义指令控制权限,需要用到的是elbinding这两个参数,其中binding的属性比较多:

  • name:指令名,不包括 v- 前缀,如:v-role="['a', 'b']"中的role
  • value:指令的绑定值,如:v-role="['a', 'b']" 中,绑定值为数组['a', 'b'],若v-role="1 + 1",则绑定值为2
  • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用
  • expression:字符串形式的指令表达式。如:v-role="['a', 'b']"中,表达式为"['a', 'a']",注意这里是字符串,不是数组
  • arg:传给指令的参数,可选。如:v-role:foo 中,参数为 "foo"
  • modifiers:一个包含修饰符的对象,如:v-role.foo.bar 中,修饰符对象为 { foo: true, bar: true }

3. 全局指令

Vue的全局指令使用Vue.directive API来定义,自定义权限控制的指令如下:

import Vue from 'vue'
import store from '@/store';

Vue.directive('role', {
  inserted: function (el, binding, node) {
    const roles = store.getters['user/roles'];
    const roleCodeArray = binding.value;
    // 如果需要获取TDesign Starter路由定义的权限代码,可以通过meta获取
    // const roleCodeArray = vnode.context.$route.meta.roleCodeArray
    let exists = false
    for (let i = 0; i < roleCodeArray.length; i++) {
      if (roles.indexOf(roleCodeArray[i]) !== -1) {
        exists = true
        break;
      }
    }
    if (!exists) {
      el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none')
    }
  }
})

注意,需要在main.jsx中导入:

import './permission';
// 导入自定义权限控制指令
import './directives';

4. 权限控制

在vue页面中使用v-role进行权限控制:

<t-link v-rool="['update']" style="margin-right: 10px" hover="color" @click="onEditClick(row.id)">/t-link>

这里是一个数组,可以传多个权限,如果用户没有这个update权限,则不显示该按钮。

标签:TDesign,Vue,自定义,el,指令,role,权限
From: https://www.cnblogs.com/michong2022/p/17031449.html

相关文章

  • 微信小程序中实现自定义省市区选择
    背景:1.小程序官方提供的省市区组件的数据与原有的数据对应不上,官方的数据太旧2.小程序重构以后没有在使用vant等框架实现过程:1.安装依赖a.微信小程序使用n......
  • vue的组件封装
    一、为什么要封装组件(组件化开发) 组件化开发(封装组件)的好处好处显而易见,可以增加代码的复用性、灵活性,从而提高开发效率。试想如果一个项目中在很多页面都能用到一个......
  • (笔记)在每个 Linux 用户SSH登录时执行自定义脚本
     有些时候,我们需要在linux用户登录时执行我们自己编写的脚本,比如登录时给个友好的交互输出提示。为了实现该目的,我们有必要去了解一下linux在用户登录时执行内部shell的......
  • vue项目服务器部属源码调试解决办法
    一、问题来源   希望在远程发布的测试服务器上直接启用vscode 的调试模试,来解决项目实际部属时的问题。也就是在调试模式下,会有子域名的问题。二、如何在调试模......
  • 如何封装一个vue的插件
    首先在toast文件夹去创建一个index.js文件,在js文件中创建一个对象,将他导出//index.jsconsttoast={}exportdefaulttoast  在main.js中导入这个文件,并且use......
  • 第一节:环境准备、项目结构详解、App.vue/main.js/uni.scss详解、各种引用(组件/js/css
    一. 环境准备1. HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 微信开发工具 下载地址:https://developers.weixin.qq.com/miniprogram/dev......
  • Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
    一、前言上一篇我分享了一篇关于Asp.NetCore中IdentityServer4授权中心之应用实战的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不......
  • vue导航触发流程
    导航被触发。在失活的组件里调用beforeRouteLeave守卫。调用全局的beforeEach守卫。在重用的组件里调用beforeRouteUpdate守卫(2.2+)。在路由配置里调用befor......
  • vue3+vite配置多页面
    通过配置多页面应用,从而将给子模块依赖分隔开各自加载,可以减少初始资源的请求,加快页面的访问速度。比如我们有很多H5页面,并且相互独立,比如报修,购卡,计价规则等等,那我们如......
  • vite+vue3项目在chrome中debuger源码
    在vue文件的script中打上一个debugger,本以为可以开心的debugger了,结果控制台看到的是这个样子查了一些方案,这样就可以解决了......