最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3 自定義loading的操作方法

 更新時(shí)間:2023年11月06日 15:58:24   作者:唐十八_wei  
這篇文章主要介紹了vue3 自定義loading的操作方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

使用antdv 后發(fā)現(xiàn)只有button支持loaidng屬性,而其他元素不能使用loading來顯示是否加載中,需要套一層 a-spin 才能支持,非常不方便。

所以寫了個(gè)自定義的指令來進(jìn)行處理

新建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>

在新建個(gè)loading.ts 用來注冊v-loading 相關(guān)操作

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 進(jìn)行注冊

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

在頁面中就可以直接進(jìn)行v-loading 進(jìn)行使用了

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

到此這篇關(guān)于vue3 自定義loading的文章就介紹到這了,更多相關(guān)vue3 自定義loading內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue 中axios配置實(shí)例詳解

    Vue 中axios配置實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹了Vue axios配置,非常不錯(cuò),代碼簡單易懂,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • vue+高德地圖實(shí)現(xiàn)地圖搜索及點(diǎn)擊定位操作

    vue+高德地圖實(shí)現(xiàn)地圖搜索及點(diǎn)擊定位操作

    這篇文章主要介紹了vue+高德地圖實(shí)現(xiàn)地圖搜索及點(diǎn)擊定位操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vuejs學(xué)習(xí)筆記之使用指令v-model完成表單的數(shù)據(jù)雙向綁定

    Vuejs學(xué)習(xí)筆記之使用指令v-model完成表單的數(shù)據(jù)雙向綁定

    表單類控件承載了一個(gè)網(wǎng)頁數(shù)據(jù)的錄入與交互,本章將介紹如何使用指令v-model完成表單的數(shù)據(jù)雙向綁定功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值。感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • Vue2(三)實(shí)現(xiàn)子菜單展開收縮,帶動(dòng)畫效果實(shí)現(xiàn)方法

    Vue2(三)實(shí)現(xiàn)子菜單展開收縮,帶動(dòng)畫效果實(shí)現(xiàn)方法

    這篇文章主要介紹了vue實(shí)現(xiàn)收縮展開效果的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue大屏數(shù)據(jù)展示示例

    Vue大屏數(shù)據(jù)展示示例

    公司的大數(shù)據(jù)工作組就需要通過數(shù)據(jù)大屏展示一些處理過后有價(jià)值的信息,本文主要介紹了Vue大屏數(shù)據(jù)展示示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Vue判斷數(shù)組內(nèi)是否存在某一項(xiàng)的兩種方法

    Vue判斷數(shù)組內(nèi)是否存在某一項(xiàng)的兩種方法

    這篇文章主要介紹了Vue判斷數(shù)組內(nèi)是否存在某一項(xiàng),今天給大家分享兩種方法,分別是findIndex()和 indexOf()方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 在Vue中使用Immutable.js的步驟

    在Vue中使用Immutable.js的步驟

    這篇文章主要介紹了在Vue中使用Immutable.js的步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 詳解Vue中使用插槽(slot)、聚類插槽

    詳解Vue中使用插槽(slot)、聚類插槽

    這篇文章主要介紹了Vue中使用插槽(slot)、聚類插槽,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue中引入樣式文件的方法

    Vue中引入樣式文件的方法

    這篇文章主要介紹了Vue中引入樣式文件的方法,需要的朋友可以參考下
    2017-08-08
  • vue前端RSA加密java后端解密的方法實(shí)現(xiàn)

    vue前端RSA加密java后端解密的方法實(shí)現(xiàn)

    本文主要介紹了vue前端RSA加密java后端解密的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論

桂东县| 太康县| 台南市| 安康市| 房产| 淮安市| 登封市| 揭阳市| 泸州市| 成武县| 崇阳县| 胶州市| 清远市| 沅陵县| 滦平县| 元江| 塔城市| 克拉玛依市| 凌源市| 抚松县| 北辰区| 凤庆县| 郸城县| 潼关县| 景谷| 蓬莱市| 静乐县| 云南省| 德兴市| 漾濞| 南和县| 海口市| 平顺县| 普宁市| 贵港市| 阜新市| 安岳县| 宣化县| 新乐市| 黄大仙区| 沈阳市|