vue自定义指令loading

1,106 阅读2分钟

loading加载

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

  1. loading自定义指令 当在vue项目中请求后台接口时,常常会使用 loding 过渡数据的加载时间。由于请求服务端接口需要时间,在请求时加上一个loading logo效果将极大提升用户体验和减轻服务端压力。

2.API vue自身提供了一个注册指令的函数

directive

包含两个参数,第一个就是作为v-directive的名字,第二个是一个对象,主要对当前的需要这个指令做一些操作。

一个指令定义对象提供如下几个钩子函数(可选的)

bind,inserted,update,有需要的小伙伴可以去官网查看(附上地址:vue自定义指令

  1. 实现方案

这里我们主要讲一下在对象里面操作的东西,其他的就跳过了

我们可以利用inserted这个钩子函数,里面有两个参数,分别是el和binding,el是指定所绑定的元素,可以用来直接操作dom, binding是一个对象,包含一下的属性: name:指令名,value:指令的绑定值,oldvalue:指令绑定的前一个值,我们所需要的东西就这么多了。

const loadingDiractive={
    inserted(el,binding){
        console.log(el)
        console.log(binding)
    }
}

我们可以看看打印出来的是什么东西

image.png

可以看出打印出来的就是当前绑定的dom元素。

image.png 这里也可以看出打印出来的值,因为我们接下来要用这些值

我们在当前的js文件里面引入vue和loading.vue组件

image.png

我们会接着用到extends 使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象

废话不多说,直接上代码

import Loading from './loading.vue'
console.log(Loading)
const loadingDiractive={
   
    inserted(el,binding){
        console.log(el);
        console.log(binding)
          const loadingCtor=Vue.extend(Loading)
          const loadingComp=new loadingCtor().$mount()
          el.instance=loadingComp
          if(binding.value){
              append(el)
          }
    },
    update(el,binding){
         if(binding.value!=binding.oldValue){
             binding.value ? append(el):remove(el)
         }
    }
    
}
function append(el){
    el.appendChild(el.instance.$el)
}
function remove(el){
    el.remove(el.instance.$el)
}

export default loadingDiractive

看看效果

image.png

瑞思拜