vue自定义指令-CSDN博客

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    自定义全局指令

    在 Vue 实例创建之前通过 Vue.directive(name, definition) 的方式来注册全局指令。其中 name 是指令的名称definition 是一个对象里面包含了指令的具体实现。

    例如下面是一个自定义全局指令的例子实现了点击元素时显示元素内容的简单功能

    Vue.directive('click-me', {  
      bind: function (el, binding, vnode) {  
        el.addEventListener('click', function () {  
          alert(binding.value,vnode);  
        });  
      }  
    });
    

    使用

    <template>  
      <div v-click-me="message">点击我</div>  
    </template>
    

    也可以把自定义指令单独封装到一个文件里然后在main.js中引入
    1、在src下新建一个文件夹directive新建文件v.directive.js(文件名自己起一般是指令名.directive.js)

    import Vue from "vue"
    
    Vue.directive('click-me', {  
      bind: function (el, binding, vnode) {  
        el.addEventListener('click', function () {  
          alert(binding.value,vnode);  
        });  
      }  
    });
    

    2、在main.js中引入import "@/directive/v.directive.js"
    3、在页面中使用

    <template>
      <div class="container">
         <a v-click-me="'message'">按钮2</a>
      </div>
    </template>
    

    局部注册指令

    除此之外还可以局部注册指令

    <template>
      <div class="container">
         <a v-auth="'message'">按钮2</a>
      </div>
    </template>
    
    export default {
      directives: {
        auth: { 
          bind (el, binding, vnode) {    
              alert(binding.value,vnode);  
          } 
        }  
      },
    }
    

    应用场景

    做权限验证时我们需要根据用户身份来判定是否显示一些元素的显示比如后台管理只有管理员才能新增角色那么只有用户角色是管理员时新增按钮才会显示这时候就可以使用自定的指令。

    自定义指令传入一个字符串比如

    把我们获取到的用户的权限信息与字符串做比较

    如果不相同将元素的样式设置为display:none

    //处理自定义指令的文件
    import { useGlobalUserStore } from '@store/UseGlobalStore'
    export const AuthDic = {
        name:'add',
        mounted(el,binding){
            let permissions = useGlobalUserStore().permissions;
            let val = binding.value; //'add_add'
            console.log( val,'value' )
            if( !val ) {
                throw '该字段必须传值'
            }
    
            //判断当前用户是否时超管 这两类用户都是有权限
            if( permissions.includes("*:*:*") ) return
            if( permissions.includes(val) ) return
    
            //没有权限
            const parent = el.parentElement
            parent && parent.removeChild(el)
        }
    }
    

    也可以

    export default {
    	directives: {
    		auth: (el, binding) => {
    			if (!getCookie("userName")) {
    				el.style.display = "none";//先判断是否登陆没登陆都不显示
    			} else {
    				let roleName = getCookie("roleName");//用来区分用户角色
    				if (roleName === binding.value) {
    					el.style.display = "block"; //判断当前用户角色和传入的角色是否相等相等则显示
    				} else {
    					el.style.display = "none";
    				}
    			}
    		}
    	}
    }
    

    注上面这种写法是一种简写因为bind和update的方法一致。

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: vue

    “vue自定义指令-CSDN博客” 的相关文章

    计算时间差

    #include<ctime> #include<iostream> using namespace std; void fun() { int test = 0; for(int i=0;i<10000;i++){ for(int j=0;j<1000...

    图的基本概念

    完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全图,n个顶点,n*(n-1)个边的有向图就是有向完全图。 权:在某些图中,边具有与之相关的数值,称为权重。 邻接顶点:一条边上的两个点互为邻接顶点。 度:与点v关联的边数,称为v的度,有向图中以v...

    华为OD机试真题 Java 实现【士兵过河】【2022.11 Q4 新题】

        所有题目均有四种语言实现。C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录 题目 一支N个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河。 敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭。 现在军...

    Python怎么实现类装饰器及应用 - 编程语言

    本篇内容主要讲解“Python怎么实现类装饰器及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现类装饰器及应用”吧! 示例Python中的装饰器既可以是函数也可以是类。在前...

    Java

    1.      在web容器中设置(此处以tomcat为例)在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置:<!-- ==================== Default Session Configura...

    Linux

    打开vim的配置文件,位置在/etc/vim/vimrc在其中加入set fileencodings=utf-8,gb2312,gbk,gb18030set termencoding=utf-8set encoding=prc保存退出,此时vim就能正确显示中文了。 对于gedit,解决方...