VUE3(三十九)自定义loading组件~

简介: VUE3(三十九)自定义loading组件~

我使用的比较多的是阿里的ant-design-vue组件库。


在这里好像没有找到太好用的全局loading。


组件库没有,那就自定义一个吧,主要是定义成啥样的呢?嗯……layui没黄之前,他那个loading我甚是喜欢,就整他了。


我这里使用的是VUE3.2+typescript,上代码:


loading.vue


<template>
  <div class="loading" v-show="msg?.show">
    <div>
      <!-- <img src="@/assets/images/loading.gif" alt="" srcset="" /> -->
      <img src="/src/assets/img/loading-0.gif" alt="" srcset="" />
    </div>
  </div>
</template>
<script lang="ts">
export default {
  props: {
    msg: Object,
    aaa: Number,
  },
};
</script>
<style scoped lang="scss">
.loading {
  width: 100%;
  height: 100%;
  //   background-color: rgba(0, 0, 0, 0.2);
  position: fixed;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000000000000000000000000;
  div {
    color: #fff;
    padding: 6px 15px;
  }
}
</style>

loading.ts

import { createApp, reactive } from 'vue'
import myLoad from '/@/components/loading/loading.vue'
// 引入公共js文件
import utils from "/@/assets/js/public/function";
const msg = reactive({
    show: false,
    title: '拼命加载中...'
})
const $loading = createApp(myLoad, {msg}).mount(document.createElement('div'))
// console.log($loading);
export const load = {
    show(title:any = '') { // 控制显示loading的方法
        msg.show = true
        msg.title = title
        document.body.appendChild($loading.$el)
    },
    hide(time:number = 1000) { // 控制loading隐藏的方法
        // 延迟 1秒
        utils.sleep(time).then(() => {
            msg.show = false
        });
    }
}
// export { load }
// export default {
//     install(app) {
//         // console.log(app);
//         // Vue.prototype.$http = axios
//         app.config.globalProperties.$loading = load
//     }
// }


utils.sleep


/**
     * @name: 程序停止执行时间(睡一会儿)
     * @author: camellia
     * @email: guanchao_gc@qq.com
     * @date: 2020-12-21
     * @param:  time    number  显示时间
     */
    sleep(time: number) {
        return new Promise((resolve) => setTimeout(resolve, time));
        // utils.sleep(500).then(() => {
        //     // 这里写sleep之后需要去做的事情
        //     console.log(router.currentRoute.value);
        // });
    }

 

调用:


1:引入


import { load } from "/@/components/loading/loading";


2:调用


load.show();
load.hide();

 


最终效果我这里就不做展示了,有兴趣可以自己尝试一下。

 


有好的建议,请在下方输入您的评论。


目录
相关文章
|
2天前
|
JavaScript
vue组件中的插槽
本文介绍了Vue中组件的插槽使用,包括单个插槽和多个具名插槽的定义及在父组件中的使用方法,展示了如何通过插槽将父组件的内容插入到子组件的指定位置。
|
2天前
|
缓存 JavaScript 前端开发
「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
该文章全面覆盖了Vue.js从基础知识到进阶原理的48个核心知识点,包括Vue CLI项目结构、组件生命周期、响应式原理、Composition API的使用等内容,并针对Vue 2与Vue 3的不同特性进行了详细对比与讲解。
「offer来了」从基础到进阶原理,从vue2到vue3,48个知识点保姆级带你巩固vuejs知识体系
|
1天前
|
缓存 监控 UED
升级 Vue3 时,如何减少打包体积的增加?
升级 Vue3 时,如何减少打包体积的增加?
7 2
|
1天前
|
API UED
如何实现Vue2项目升级Vue3?
如何实现Vue2项目升级Vue3?
6 1
|
1天前
|
JavaScript
|
1天前
|
API UED
升级 Vue3 后,项目的打包体积会有什么变化?
升级 Vue3 后,项目的打包体积会有什么变化?
5 0
|
3天前
|
缓存 JavaScript 前端开发
vue-day02计算属性,v-bind,v-if,v-for
文章介绍了Vue.js中的计算属性、class与style的绑定、条件渲染和列表渲染的使用。通过示例代码展示了如何使用计算属性简化模板逻辑、如何通过v-bind动态绑定class和style、如何使用v-if进行条件渲染以及如何使用v-for进行列表渲染。这些特性使得Vue.js在构建动态用户界面时更加灵活和强大。
vue-day02计算属性,v-bind,v-if,v-for
|
1天前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
1天前
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
|
3天前
|
JavaScript 网络架构
下一篇
无影云桌面