Vue2封装自定义全局Loading组件

前言

在开发的过程中,点击提交按钮,或者是一些其它场景总会遇到Loading加载框,PC的一些UI库也没有这样的加载框,无法满足业务需求,因此可以自己自定义一个,实现过程如下。

效果图

如何封装?

第1步:创建要封装成全局组件的文件

html 复制代码
<template>
  <div class="loading"
       v-show="msg.show">
    <div class="load-box">
      <!-- 图片放在文末,自行右键另存为 -->
      <img src="@/assets/common/load.png">
      <span>{{ msg.title }}</span>
    </div>
  </div>
</template>

<script>
export default {
  name: 'SelfLoading',

  props: {
    msg: {
      type: Object,
      default: () => ({
        show: false,
        title: '加载中...'
      })
    }

  },

  methods: {
    // 显示loading的方法
    show (title = '加载中...') {
      this.msg.show = true
      this.msg.title = title
    },

    // 隐藏loading的方法
    hide () {
      this.msg.show = false
    }
  }
}
</script>

<style lang="scss" scoped>
.loading {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 9999;
  .load-box {
    background-color: rgba(0, 0, 0, 0.5);
    width: 100px;
    height: 100px;
    border-radius: 5px;
    box-shadow: 0px 1px 15px rgba(0, 0, 0, 0.5);
    color: #fff;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    letter-spacing: 0.8px;
    font-size: 13px;
    img {
      width: 30px;
      margin-bottom: 8px;
      animation: rotate 0.8s linear infinite;
    }
  }
}

@keyframes rotate {
  to {
    transform: rotate(360deg);
  }
}
</style>

第2步:注册组件

Loading这类的通用组件一般定义为全局组件,那么直接在main.js文件中全局注册。

javascript 复制代码
import SelfLoading from '@/components/Loading'
Vue.component('SelfLoading', SelfLoading)

第3步:使用组件

html 复制代码
<template>
  <!-- 全局Loading -->
  <self-loading ref="loadingRef" />
</template>

<script>
export default {
  // 仅做示例
  created () {
    // 开启全局Loading,不传参默认为 '加载中...'
    this.$refs.loadingRef.show('上传中...')
  },

  // 仅做示例
  beforeDestroy () {
    // 隐藏全局Loading
    this.$refs.loadingRef.hide()
  }
}
</script>

图片在这里

图片右击另存为即可,好像会有CSDN自动添加的水印,不太知道怎么去除,需要原图的可以在评论区留下你的邮箱地址。

相关推荐
触底反弹23 分钟前
⚡ Promise.all 性能优化:让 Agent 的工具调用飞起来
javascript·人工智能·后端
心中有国也有家40 分钟前
AtomGit Flutter 鸿蒙客户端:错误处理与优雅降级策略
android·javascript·flutter·华为·harmonyos
Listen·Rain42 分钟前
Vue3中computed详解
前端·javascript·vue.js
meilindehuzi_a9 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
鱼樱前端10 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
Listen·Rain11 小时前
Vue3:setup详解
前端·javascript·vue.js
kyriewen12 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
‘’林花谢了春红‘’12 小时前
小玩意 生日快乐
css·html·css3
小粉粉hhh13 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js
索西引擎14 小时前
【React】key 属性:协调算法中的元素标识机制与最佳实践
前端·javascript·react.js