Skip to content

loading指令

用于防抖,占位

使用

ts
import App from './App.vue'
import { loadingDirective } from 'li-daisy'

const app = createApp(App)

<!-- 自定义指令名称 这里假定为loading -->
app.directive('loading',loadingDirective)

基础用法

通过 v-loading 指令去绑定 loading 状态

开启 loading1
关闭 loading1
切换 loading1
这是一个块级容器
该加载状态由loading1控制
这是另外一个块级容器
该加载状态由loading2控制
vue
<template>
  <div class="flex flex-col gap-4">
    <div class="flex items-center justify-around gap-3">
      <div class="btn" @click="setTrue">开启 loading1</div>
      <div class="btn" @click="setFalse">关闭 loading1</div>
      <div class="btn" @click="toggle">切换 loading1</div>
    </div>

    <div
      v-loading:infinity="loading1"
      class="mx-auto border border-base-300 rounded-lg p-4 w-[280px] h-[120px] relative"
    >
      <div>这是一个块级容器</div>
      <div class="text-sm opacity-70">该加载状态由loading1控制</div>
    </div>

    <div
      v-loading:bars.neutral.xs="loading2"
      class="mx-auto border border-base-300 rounded-lg p-4 w-[280px] h-[120px] relative"
    >
      <div>这是另外一个块级容器</div>
      <div class="text-sm opacity-70">该加载状态由loading2控制</div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const loading1 = ref(true)
const toggle = () => (loading1.value = !loading1.value)
const setTrue = () => (loading1.value = true)
const setFalse = () => (loading1.value = false)

const loading2 = ref(true)
</script>

参数/对象设置

通过指令的参数(arg)、修饰符(modifiers)或 value 对象来灵活配置 v-loading

  • 布尔模式(仅控制显隐)
    html
    <div v-loading="loading">…</div>
  • 参数模式(指定 type)
    html
    <div v-loading:ball="loading">type=ball</div>
  • 修饰符模式(指定 type、color、size)
    html
    <div v-loading:bars.error.xs="loading">type=bars, color=error, size=xs</div>
  • 对象模式(同时配置多个属性)
    html
    <div
      v-loading="{ visible: loading, type: 'ring', color: 'accent', size: 'lg' }"
    >…</div>
开启 loading
关闭 loading
切换 loading
vue
<template>
  <div class="flex flex-col gap-6">
    <div class="flex items-center justify-around gap-3">
      <div class="btn" @click="setTrue">开启 loading</div>
      <div class="btn" @click="setFalse">关闭 loading</div>
      <div class="btn" @click="toggle">切换 loading</div>
    </div>

    <div class="flex flex-col gap-8 mt-4 items-center">
      <!-- 参数模式:type=ball -->
      <div
        v-loading:ball="loading"
        class="border border-base-300 rounded-lg p-4 w-64 h-32 relative"
      ></div>
      <!-- 修饰符模式:type=bars, color=error, size=xs -->
      <div
        v-loading:bars.error.xs="loading"
        class="border border-base-300 rounded-lg p-4 w-64 h-32 relative"
      ></div>

      <!-- 对象模式:同时配置 visible/type/color/size -->
      <div
        v-loading="{ visible: loading, type: 'ring', color: 'accent', size: 'lg' }"
        class="border border-base-300 rounded-lg p-4 w-64 h-32 relative"
      ></div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const loading = ref(true)
const toggle = () => (loading.value = !loading.value)
const setTrue = () => (loading.value = true)
const setFalse = () => (loading.value = false)
</script>

参数说明

1. 可选参数来源

  • value(布尔或对象)
    • 布尔:控制显隐
    • 对象:可同时设置 visible / type / color / size
  • arg(位置参数)
    • 同时可作为 type / color / size
  • modifiers(修饰符)
    • 逐项指定 type / color / size

2. 参数规则

属性所在位置类型可选值默认值
visiblevalue (boolean)booleantrue / falsefalse
typevalue / arg / modifiersstringspinner / dots / ring / ball / barsspinner
colorvalue / arg / modifiersstringprimary / secondary / accent / neutral / info / success / warning / errorprimary
sizevalue / arg / modifiersstringxs / sm / md / lg / xlmd

3. 优先级

value > arg = modifiers