自定义loading指令

directives/MyLoading/index.vue:

复制代码
<template>
  <div class="loading-wrapper">
    <div class="loading-content">
      <img width="50" height="50" src="./loading.gif" /> <!-- 需要一个gif图片 -->
      <p class="title">{{ title }}</p>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return { title: '正在加载中...' }
  }
}
</script>
<style lang="less" scoped>
.loading-wrapper {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate3d(-50%, -50%, 0);
  .loading-content {
    width: 100%;
    text-align: center;
    .title {
      line-height: 20px;
      font-size: 12px;
      margin: 0;
    }
  }
}
</style>
复制代码
directives/MyLoading/index.js:
复制代码
import Vue from 'vue'
import MyLoading from './index.vue'

const myLoading = {
  inserted(el, binding) {
    const Loading = Vue.extend(MyLoading)
    const loading = new Loading().$mount()
    el.instance = loading
    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.removeChild(el.instance.$el)
}

export default myLoading
复制代码

main.js:

import myLoading from '@/directives/MyLoading/index'
Vue.directive('myLoading', myLoading)

使用:(App.vue)

复制代码
<template>
  <div id="app">
    <ul v-myLoading="!list.length">
      <li v-for="item in list" :key="item.id">
        {{ item.title }}
      </li>
    </ul>
  </div>
</template>
<script>
import axios from 'axios'
export default {
  data() {
    return { list: [] }
  },
  async created() {
    const res = await axios.get('https://jsonplaceholder.typicode.com/todos?_limit=5')
    this.list = res.data
  }
}
</script>
复制代码

效果:当接口数据未返回时显示loading,返回结果时关闭loading

 
注意:用length去判断不够准确,因为length可能为0,应该以接收返回code码或其他标识为准
 
 
posted @   吴小明-  阅读(209)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2020-09-25 函数
点击右上角即可分享
微信分享提示