vue3 自定义loading的操作方法

 更新时间:2023年11月06日 15:58:24   作者:唐十八_wei  
这篇文章主要介绍了vue3 自定义loading的操作方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

使用antdv 后发现只有button支持loaidng属性,而其他元素不能使用loading来显示是否加载中,需要套一层 a-spin 才能支持,非常不方便。

所以写了个自定义的指令来进行处理

新建loading.vue文件用来页面显示

<template>
  <div class="loading-container">
    <LoadingOutlined />
    <p>{{ state.loading.text }}</p>
  </div>
</template>
<script lang="ts" setup>
import { LoadingOutlined } from '@ant-design/icons-vue';
import { reactive } from 'vue';
const FONT_SIZE = {
  samll: {
    icon: '16px',
    p: '12px'
  },
  default: {
    icon: '20px',
    p: '16px'
  },
  large: {
    icon: '24px',
    p: '20px'
  }
}
const state = reactive({
  loading: {
    text: '正在加载中',
    fontSize: {
      icon: '20px',
      p: '16px'
    }
  } as { text?: string; fontSize?: { icon: string; p: string } }
})
function updateInfo(params: { text: string; size: 'samll' | 'default' | 'large' }) {
  state.loading = {
    text: params.text,
    fontSize: FONT_SIZE[params.size]
  }
}
defineExpose({ updateInfo })
</script>
<style lang="scss" scoped>
.loading-container {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  overflow: hidden;
  background: rgba($color: #ffffff, $alpha: 0.7);
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  font-size: 16px;
  color: #335dfd;
  z-index: 999999;
  :deep(.anticon-loading) {
    font-size: 20px;
  }
  p {
    margin-top: 10px;
    font-size: 16px;
  }
}
</style>

在新建个loading.ts 用来注册v-loading 相关操作

import { createApp, Directive } from 'vue';
import Loading from './index.vue';
/**
 * @description 判断是否为空对象
 * **/
export const isEmptyObj = (obj: object): boolean => {
  return JSON.stringify(obj) === "{}";
};
/** v-eLoading:[loadingConfig]="state.l||state.a */
const loading: Directive = {
  mounted(el, binding) {
    const app = createApp(Loading);
    const instance = app.mount(document.createElement('div')) as any;
    el.instance = instance;
    el.style.position = 'relative';
    const arg:any = binding.arg
    if (!isEmptyObj(arg as any)){
      const params = {
        text:arg?.text||'正在加载中',
        size:'default'
      }
      instance.updateInfo(params)
    }
      if (binding.value) {
        appendEl(el);
      }
  },
  updated(el, binding) {
    console.log(binding.value !== binding.oldValue)
    if (binding.value !== binding.oldValue) {
      binding.value ? appendEl(el) : removeEl(el);
    }
  },
};
const appendEl = (el: { appendChild: (arg0: any) => void; instance: { $el: any; }; }) => {
  el.appendChild(el.instance.$el);
};
const removeEl = (el: { removeChild: (arg0: any) => void; instance: { $el: any; }; }) => {
  el.removeChild(el.instance.$el);
};
export default loading;

最后在main.ts 进行注册

import loadingDirective from 'packages\Loading\index.ts'
createApp(App).directive('loading', loadingDirective).mount('#app')

在页面中就可以直接进行v-loading 进行使用了

<div v-loading="true"></div>

到此这篇关于vue3 自定义loading的文章就介绍到这了,更多相关vue3 自定义loading内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue watch自动检测数据变化实时渲染的方法

    vue watch自动检测数据变化实时渲染的方法

    本篇文章主要介绍了vue watch自动检测数据变化实时渲染的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Vue2.0 UI框架ElementUI使用方法详解

    Vue2.0 UI框架ElementUI使用方法详解

    这篇文章主要为大家详细介绍了Vue2.0 UI框架ElementUI的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • vue如何实现路由跳转到外部链接界面

    vue如何实现路由跳转到外部链接界面

    这篇文章主要介绍了vue如何实现路由跳转到外部链接界面,具有很好的参考价值,希望对大家有所帮助。
    2022-10-10
  • vue2 设置router-view默认路径的实例

    vue2 设置router-view默认路径的实例

    今天小编就为大家分享一篇vue2 设置router-view默认路径的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue如何使用 Slot 分发内容实例详解

    vue如何使用 Slot 分发内容实例详解

    本篇文章主要介绍了vue如何使用 Slot 分发内容实例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue按需引入element Transfer 穿梭框

    vue按需引入element Transfer 穿梭框

    这篇文章主要介绍了vue按需引入element Transfer 穿梭框的相关资料,需要的朋友可以参考下
    2017-09-09
  • Vue.js实现大屏数字滚动翻转效果

    Vue.js实现大屏数字滚动翻转效果

    大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果。本文通过截图代码的形式给大家介绍Vue.js实现大屏数字滚动翻转效果,感兴趣的朋友一起看看吧
    2019-11-11
  • vue时间选择控件的使用方式

    vue时间选择控件的使用方式

    这篇文章主要介绍了vue时间选择控件的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue自定义弹窗指令的实现代码

    Vue自定义弹窗指令的实现代码

    使用vue2.0实现自定义弹窗指令,当标签有该指令时,点击标签可以弹出弹窗。下面通过实例代码给大家介绍Vue自定义弹窗指令的相关知识,感兴趣的朋友一起看看吧
    2018-08-08
  • Vue vant使用ImagePreview实现预览图片

    Vue vant使用ImagePreview实现预览图片

    这篇文章主要介绍了Vue vant使用ImagePreview实现预览图片,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10

最新评论