Vue封装loading加载指令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

      之前用vue做了一个实现增删查改的记账本案例,实现基本功能,但是在实践中,我们几乎用的是vue的工程化开发,通过vue的脚手架,今天讲述一个基于Vue工程化开发的自定义封装指令,先讲述什么是自定义封装指令,然后再做一个自定义封装加载页面指令来加深理解。


一、自定义封装指令

      在vue中,我们经常用到v-开头的指令,v-html,v-show等,他们都是有着对应的功能,那要是我们在一个页面中也有一个这样要经常使用的功能,且代码逻辑不变,如果每到要使用的时候就要再写一遍,这样很麻烦,其实和封装函数一样,都是在简化代码,便于再次使用,我们封装号这个指令后,就可以利用v-指令名来使用他了。

二、使用方法

   自定义指令分为全局注册和局部注册

1.全局注册

在main.js中书写 代码如下(示例):

Vue.directive('指令名',{
   "inserted"(el){
    //对el元素的操作
 }
})

2.局部注册

  在对应组件的js部分中书写 代码如下(示例):

directives:{
   "指令名":{
     inserted() {
      //对el元素的操作
    }
  }
}

  el为添加自定义指令的元素标签


三、在自定义指令中添加参数 

  有些指令是可以添加参数值的,上面提及的是没有带参数的指令的情况,那么我们怎么拿到这个参数值呢

binding获取参数值

   //定义一个div标签,指令名为v-color,它还要传进一个颜色值

<div  v-color="red">我是一个盒子</div>

//js代码

directives:{

    color:{

     //利用binding获取

      inserted (el,binding){

         el.style.color=binding.value

       }

   }

}


 

四、自定义加载指令

   在应用场景中,加载页面通常不会那么快响应出来,那么这时页面应该处于加载状态才行,才能提高用户的体验感,因此在数据响应完成前应该有一个加载画面,这时就可以将他们封装成一个指令进行使用

代码如下:

v-loading="show",show在data函数中定义为true,对元素标签拿到数据并赋值给对应数据渲染再页面后,再将show改为false,因为对数据进行了修改,所以触发了update函数,因此在做一次判断,就可以结束加载画面了

//在css中先写加载类名的样式
<style>
/* 添加伪元素类名使加载数据前渲染这个图片 */
.loading:before {
  content:"";
  position:absolute;
  left:0;
  top:0;
  width: 100%;
  height: 100%;
  background: #fff url("./load.gif") no-repeat center; 
}
</style>
//在js中
<script>
// 自定义加载指令
  directives:{
    "loading":{
      // 判断是否要渲染这个伪元素
      inserted(el,binding){
        if(binding.value){
             el.classList.add('loading')
        }else{
          el.classList.remove('loading')
        }
      },
      // 修改数据后更新的操作
      update(el,binding){
        if (binding.value) {
          el.classList.add('loading')
        } else {
          el.classList.remove('loading')
        }
      }
    }
  }
</script>

 

 

总结

  以上就是今天的内容,主要对自定义指令内容做了个讲解,为什么需要自定义指令以及自定义指令的分类,以及最后做了一个加载自定义指令的使用。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过 Vue 自定义指令来实现 loading 指令封装。 代码示例: ```javascript // 定义 loading 指令 Vue.directive('loading', { // 当被绑定的元素插入到 DOM 中时 inserted: function(el, binding) { // 创建 loading 元素 const loadingEl = document.createElement('div') loadingEl.className = 'loading-wrapper' loadingEl.innerHTML = '<div class="loading"></div>' // 根据传入的参数设置 loading 框的样式 if (binding.value && typeof binding.value === 'object') { const { color, size } = binding.value loadingEl.querySelector('.loading').style.borderTopColor = color || '#fff' loadingEl.querySelector('.loading').style.width = size || '20px' loadingEl.querySelector('.loading').style.height = size || '20px' } // 将 loading 元素添加到被绑定的元素中 el.appendChild(loadingEl) // 设置被绑定元素的 position 属性为 relative,以便让 loading 元素以相对于被绑定元素的位置进行定位 el.style.position = 'relative' }, // 当指令所在的组件的 VNode 更新时调用 update: function(el, binding) { // 如果传入的值为 true,则显示 loading 元素;否则隐藏 loading 元素 if (binding.value) { el.querySelector('.loading-wrapper').style.display = 'block' } else { el.querySelector('.loading-wrapper').style.display = 'none' } } }) ``` 在上述代码中,我们定义了一个名为 `loading` 的指令,当该指令绑定到某个元素上时,会在该元素下方添加一个 loading 框。当传入的值为 true 时,显示 loading 框,否则隐藏 loading 框。同时,我们还可以通过传入参数来自定义 loading 框的样式。 在组件中使用该指令,示例代码如下: ```html <template> <div v-loading="isLoading"></div> </template> <script> export default { data() { return { isLoading: false } }, methods: { fetchData() { this.isLoading = true // 发送请求 // 请求成功后,将 isLoading 设为 false } } } </script> ``` 在上述代码中,我们将 `isLoading` 变量绑定到 `v-loading` 指令上,当 `isLoading` 为 true 时,loading 框会显示出来。在发送请求前,我们将 `isLoading` 设为 true,请求成功后再将其设为 false,这样就可以在请求过程中显示 loading 框了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值