Vue中的自定义指令详解

自定义指令

自定义指令:自己定义的指令,可以封装一些dom 操作,扩展额外功能(自动聚焦,自动加载,懒加载等复杂的指令封装)

  • 全局注册(可以在其他组件中使用)

    Vue.directive('指令名'{
        inserted(el) {
    	  	//可以对el标签,扩展额外功能
        	el.focus() //对元素的操作
    	}
    })
    
  • 局部注册(只能在当前的组件中使用)

    directives: {
    	指令名:{
    		inserted(){
    			//可以对el标签,扩展额外功能
                el.focus() //对元素的操作
            }
        }
    }
    
  • 页面上使用:

    <input v-指令名type="text">
    

全局注册实例:

image-20230922210202215

局部注册实例:

image-20230922210830364

自定义指令-指令的值(给自定义指令传参数)

  • 语法∶在绑定指令时,可以通过“等号”的形式为指令绑定具体的参数值

    <div v-color="color">我是内容</div>
    
  • 通过binding.value可以拿到指令值,指令值修改会触发update函数

      // 局部注册指令
      directives: {
        //指令名:指令的配置项
        color: {
          inserted(el, binding) {
              //binding可以接收来自指令中传过来的值
            el.style.color = binding.value //处理的逻辑代码
          }
        }
      }
    
  • 自定义指令传参数的实例:

    image-20230922212033108

注意:由于Vue是响应式的特性,自定义指令不会处理发生变化的数据,即值从‘red’变成了‘blue’,页面并不会更新,这就要用到提供的update函数了。

  1. inserted函数:提供的是元素被添加到页面中时的逻辑。
  2. update函数:指令的值被修改的时候会触发,提供的是值变化后,dom更新的逻辑。
  • update函数:

    image-20230922213153695

自定义指令- v-loading指令封装

  • 场景:实际开发过程中,发送请求需要时间,在请求的数据未回来时,页面会处于空白状态=>用户体验不好

  • 需求:封装一个v-loading指令,实现加载中的效果

  • 本质:

    1. loading效果就是一个蒙层,盖在了盒子上
    2. 数据请求中,开启loading状态,添加蒙层
    3. 数据请求完毕,关闭loading状态,移除蒙层
  • 实现:
    1. 准备一个loading类,通过伪元素定位,设置宽高,实现蒙层
    2. 开启关闭loading状态(添加移除蒙层),本质只需要添加移除类即可
    3. 结合自定义指令的语法进行封装复用

实例:

  1. 指令:

    image-20230924111700674

  2. 逻辑:

    image-20230924111912158

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3自定义指令可以传递参数。首先,在全局使用`Vue.directive`方法来定义指令,该方法的第一个参数是指令的名字,第二个参数是一个对象,包含了指令的各种属性和方法。其,属性的`bind`函数可以接收一个`binding`参数,它包含了一些信息,其的`value`属性就是传入的参数值。比如,我们可以定义一个名为`myDirective`的指令,然后在组件使用该指令,并传入参数`loading`,如下所示: ```javascript Vue.directive('myDirective', { bind(el, binding) { // binding.value就是传入的参数值 console.log(binding.value); // 输出:loading } }) // 在组件使用指令 <template> <div v-myDirective="loading"></div> </template> export default { data() { return { loading: 'loading' } } } ``` 在上述代码,`myDirective`指令绑定到`<div>`元素上,通过`v-myDirective`来使用,并将参数`loading`传入。在指令的`bind`函数,我们可以通过`binding.value`来获取到传入的参数值。 这样,我们就可以在Vue3使用自定义指令并传递参数了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue自定义指令实现方法详解](https://download.csdn.net/download/weixin_38592502/14902824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue3 自定义指令详解](https://blog.csdn.net/weixin_46831501/article/details/124167378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼诺尔雷迪亚兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值