vue自定义指令

这里记录下,自定义指令相关思路,用到 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);

 

posted @   行走的蒲公英  阅读(925)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示