首页 > 其他分享 >vue自定义指令

vue自定义指令

时间:2024-03-12 15:14:49浏览次数:29  
标签:vue const directive 自定义 permission app 指令 hasPermi import

这里记录下,自定义指令相关思路,用到 vue3 + element plus:

说明一下使用场景:创建自定义指令 v-hasPermi , 用来判断按钮权限的(新增/编辑/删除/查看等)。

1. 页面使用(全局使用,无需引入):

<el-button type="primary" icon="Plus" plain v-hasPermi="['bid:bidding:save']">添加</el-button>  // 此处是单个权限码,支持多个权限码list:  v-hasPermi="['bid:bidding:publishs', 'bid:bidding:edit', 'bid:bidding:remove']"

2. 实现思路:

src 路径下,创建文件夹 directive , 表示存放项目所有的自定义指令文件。

这里拿 permission/hasPermi.js 举例:

/**
 * v-hasPermi 操作权限处理
 */
import useUserStore from '@/store/modules/user';
export default {
    mounted(el, binding, vnode) {
        const { value } = binding;
        const all_permission = '*:*:*';
        const permissions = useUserStore().permissions;   // 用户权限列表

        if (value && value instanceof Array && value.length > 0) {
            const permissionFlag = value;

            const hasPermissions = permissions.some((permission) => {
                return all_permission === permission || permissionFlag.includes(permission);
            });

            if (!hasPermissions) {
                el.parentNode && el.parentNode.removeChild(el);
            }
        } else {
            throw new Error(`请设置操作权限标签值`);
        }
    },
};

directive的index.js 文件,默认导出:

import hasRole from './permission/hasRole';
import hasPermi from './permission/hasPermi';
import copyText from './common/copyText';

export default function directive(app) {
    app.directive('hasRole', hasRole);
    app.directive('hasPermi', hasPermi);
    app.directive('copyText', copyText);
}

在项目主入口文件 main.js里面注册绑定:

import App from './App';
import directive from './directive'; // directive

const app = createApp(App);
directive(app);

 

标签:vue,const,directive,自定义,permission,app,指令,hasPermi,import
From: https://www.cnblogs.com/shyhuahua/p/18068338

相关文章

  • 一文搞懂Vue的MVVM模式与双向绑定
    v-model是Vue.js框架中用于实现双向数据绑定的指令。它充分体现了MVVM(Model-View-ViewModel)模式中的双向数据绑定特性。下面我们将详细解释v-model如何体现MVVM和双向绑定:1.MVVM模式MVVM模式是一种软件架构设计模式,它将应用程序分为三个部分:Model(模型):代表应用程序的......
  • vue 3+TS 封装自定义右键全局菜单(虚拟节点)
    有时我们需要点击(右键或左键)某个元素时弹出菜单,实现复制、粘贴、删除等功能。本文将介绍如何封装一个自定义的右键全局菜单(无三方依赖)。封装的菜单可自定义菜单项,图标,禁用,分割线,隐藏等。并且可以在全局任意地方使用。源码在文章末尾。效果使用<template><div><div@......
  • VUE3将时间戳转换为时间格式
     formatDate(time){constdate=newDate(time*1000);constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padStart(2,'0');//月份从0开始,所以加1,并用0填充constday=String(date.getDate()).padStart(2,&#......
  • scapy编写自定义协议
    编写自定义格式的步骤如下首先先定义一个类,把所有的字段标注下来,每个字段占用几个字节或者几个bit例子:我们这里需要构造一个trill协议的数据包,但是scapy没有对这个的支持,查看官方的协议手册https://www.rfc-editor.org/rfc/rfc6325.html#section-3.8classTRILL(Packet):......
  • Vue — 路由
    一、路由的使用步骤1.Vue2.0版本下载对应路由3.6.5版本[email protected]/[email protected].引入路由包importVueRouterfrom'vue-router';3.安装注册Vue.use(VueRouter)4.创建路由对象constrouter=newVueRouter()5.注入到newVue()中,与V......
  • 在Vue 3中,当computed属性中使用到的store中的变量或ref变量发生更新时,computed属性会
    computed传入一个getter函数,返回一个默认不可手动修改的ref对象在Vue3中,当computed属性中使用到的store中的变量或ref变量发生更新时,computed属性会自动重新计算,反映出最新的值。就是任何组件内导致store的变量变化也会导致其它组件内的computed变量变化与执行在Vue3中,当......
  • Vue3中使用TinyMce编辑器
    在线演示地址:TinyMce编辑器邮件发送一,安装TinyMce富文本npminstall@tinymce/tinymce-vue-Snpminstalltinymce-STinyMce本身是英文编辑器,所以还需要下载中文本地化文件:https://www.tiny.cloud/get-tiny/language-packages/下载完成后放入node_modules下的tinymce文......
  • VUE后台获取数据,并将数据递归为树接口所需数据形式
    后台获取数据形式(parentID=0的是父级,parentID不为0的,如果parentID与某个对象中的id相等,则表示为该对象的子级。) 代码转换:<script>varroomMenuDataL;//后台获取的教室数据methods:{//获取教室树getroommenu(){consttoken=this.$cookieTools.getTo......
  • vue3 keepalive 失效
    好久没更新博客了,重复拧螺丝keepalive之前用过,但是好久了,所以这次遇到问题觉得有点新颖我遇到的问题是在路由里面设置子路由,子路由的router-view设置keepalive不生效的问题 之前用了keep-alive没有用v-slot因为router-view就是一个单独的组件,他的本质并不是使用url对应的组......
  • Vue学习笔记46--scoped样式 + less
    scoped样式<!--组件的默认样式css写法--><!--<stylescoped>.demo{background-color:cadetblue;}</style>--><stylelang="less"scoped>.demo{background-color:cadetblue;.myfontsize{font-size:40px;}......