• Vue-2.7自定义指令


    自定义指令

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

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

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

    1. mounted(){
    2. this.$refs.inp.focus()
    3. }

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

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

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

    1. directive:{
    2. "指令名":{
    3. inserted(){
    4. //可以对el标签,扩展额外功能
    5. el.focus()
    6. }
    7. }
    8. }

    使用:

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

    指令的值

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

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

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

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

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

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

    v-loading指令封装

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

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

    分析:

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

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

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

    实现:

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

    1. <style>
    2. .loading:before{
    3. content:'';
    4. position:absolute;
    5. left:0;
    6. top:0;
    7. width:100%;
    8. height:100%;
    9. background:#fff url('./loading.gif') no-repeat center;
    10. }
    11. style>

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

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

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

    <div v-loading="isLoading"></div>
    1. data(){
    2. return{
    3. isLoading:true
    4. }
    5. },
    6. directives:{
    7. loading:{
    8. inserted(el,binding){
    9. binding.value?el.classList.add('loading'):el.classList.remove('loading')
    10. },
    11. update(el,binding){
    12. binding.value?el.classList.add('loading'):el.classList.remove('loading')
    13. }
    14. }
    15. }
  • 相关阅读:
    21天,胖哥亲自带你玩转OAuth2
    网络安全笔记5——数字签名
    基于CNN多阶段图像超分+去噪(超级简单版)
    自编码器(auto-encoder)
    11.Nginx-Rewrite
    去掉macOS终端命令行前的(base)
    Promise常用方法笔记
    【bioinfo】sam文件可选区域字段(Optional Feild)含义
    package.json 和 package-lock.json 解析
    C++面试八股文:std::vector了解吗?
  • 原文地址:https://blog.csdn.net/weixin_46479909/article/details/133795811