Vue-2.7自定义指令

自定义指令

自己定义的指令,可以封装一些dom操作,扩展额外功能

例如需求:当页面加载时,让元素将获得焦点(autofucus在safari浏览器有兼容性)

操作dom:dom元素.focus()    太麻烦!!

mounted(){
    this.$refs.inp.focus()
}

全局注册-语法(在main.js文件中注册 )

Vue.directive('指令名',{
    "inserted"(el){
        //可以对el标签,扩展额外功能
        el.focus()
    }
})

局部注册-语法(在当前文件下注册,也只能在当前页面下使用)

directive:{
    "指令名":{
        inserted(){
            //可以对el标签,扩展额外功能
            el.focus()
        }
    }
}

使用:

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

指令的值

需求:实现一个color指令-传入不同的颜色,给标签设置文字颜色

语法:v-指令名="指令值",在绑定指令时,可以通过“等号”的形式为指令绑定具体的参数值

<div v-color="color">我的内容</div>

通过binding.value可以拿到指令值

通过update钩子,可以监听指令值的变化,进行dom更新操作

directives:{
    color:{
        //1.inserted提供的是元素被添加到页面中时的逻辑
        inserted(el,binding){
            el.style.color=binding.value
        },
        //2.update指令的值被修改的时候触发,提供值变化后,dom更新的逻辑
        update(el,binding){
            el.style.color=binding.value
        }
    }
}

v-loading指令封装

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

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

分析:

1.本质loading效果就是一个蒙层,盖在了盒子上

2.数据请求中,开启loading状态,添加蒙层

3.数据请求完毕,关闭loading状态,移除蒙层

实现:

1.准备一个loading类,通过伪元素(:before,:after)定位,设置宽高,实现蒙层

<style>
.loading:before{
    content:'';
    position:absolute;
    left:0;
    top:0;
    width:100%;
    height:100%; 
    background:#fff url('./loading.gif') no-repeat center;
}
</style>

2.开启关闭loading状态(添加移除蒙层),本质只需要添加移除类即可

在盒子的class上添加或移除loading类

3.结合自定义指令的语法进行v-loading封装复用

<div v-loading="isLoading"></div>
data(){
    return{
        isLoading:true
    }
},
directives:{
    loading:{
        inserted(el,binding){
            binding.value?el.classList.add('loading'):el.classList.remove('loading')
        },
        update(el,binding){
            binding.value?el.classList.add('loading'):el.classList.remove('loading')
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值