Loading 加载
加载数据时显示动效。
ts
import { Loading } from '@szhn/dh-design-pc'区域加载
在需要的时候展示加载动画,防止页面失去响应提高用户体验。通过 v-loading 指令绑定一个 boolean 值即可为元素添加遮罩。
<template>
<div class="loading-container" v-loading="loading">
<p>数据内容区域</p>
<el-button @click="toggle">{{ loading ? '停止加载' : '开始加载' }}</el-button>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { Button as ElButton } from '@szhn/dh-design-pc'
const loading = ref(false)
function toggle() {
loading.value = !loading.value
}
</script>
<style scoped>
.loading-container {
padding: 24px;
border: 1px solid var(--el-border-color);
border-radius: var(--el-border-radius-base);
min-height: 140px;
display: flex;
flex-direction: column;
gap: 16px;
align-items: flex-start;
}
</style>自定义加载中组件内容
可以通过 element-loading-text / element-loading-spinner / element-loading-svg / element-loading-background 自定义加载文字、图标以及背景色。
<template>
<div
class="loading-container"
v-loading="loading"
element-loading-text="努力加载中…"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.6)"
>
<p>请等待片刻…</p>
<el-button @click="loading = !loading">{{ loading ? '停止' : '开始加载' }}</el-button>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { Button as ElButton } from '@szhn/dh-design-pc'
const loading = ref(true)
</script>
<style scoped>
.loading-container {
padding: 24px;
border: 1px solid var(--el-border-color);
border-radius: var(--el-border-radius-base);
min-height: 140px;
display: flex;
flex-direction: column;
gap: 16px;
align-items: flex-start;
color: var(--el-text-color-regular);
}
</style>让加载组件铺满整个屏幕
当使用指令方式时,给 v-loading 添加 fullscreen 修饰符可以让遮罩插入至 body 上,可以搭配 lock 修饰符锁定滚动。
<template>
<el-button @click="openFullscreen">打开全屏加载(3 秒后自动关闭)</el-button>
</template>
<script lang="ts" setup>
import { Loading, Button as ElButton } from '@szhn/dh-design-pc'
function openFullscreen() {
const instance = Loading.service({
lock: true,
text: '加载中…',
background: 'rgba(0, 0, 0, 0.7)',
})
setTimeout(() => instance.close(), 3000)
}
</script>以服务的方式来调用
Loading 还可以通过 Loading.service(options) 以服务方式调用,返回一个 Loading 实例,调用 close() 关闭。全屏 Loading 默认是单例模式;如果完整引入 dh-design-pc,也可以通过全局方法 this.$loading(options) 调用。
<template>
<el-button type="primary" @click="openLoading">以服务方式调用</el-button>
</template>
<script lang="ts" setup>
import { Loading, Message, Button as ElButton } from '@szhn/dh-design-pc'
function openLoading() {
const instance = Loading.service({
fullscreen: true,
text: '正在请求数据…',
background: 'rgba(0, 0, 0, 0.6)',
})
setTimeout(() => {
instance.close()
Message.success('加载完成')
}, 1500)
}
</script>应用上下文继承 (2.9.10)
Loading.service 支持接收当前应用的 appContext 作为第二个参数,从而继承全局配置、国际化与注入内容。
ts
import { getCurrentInstance } from 'vue'
import { Loading } from '@szhn/dh-design-pc'
const { appContext } = getCurrentInstance()!
Loading.service({}, appContext)API
配置项(部分)
| 名称 | 说明 | 类型 | 默认 |
|---|---|---|---|
| target | Loading 需要覆盖的 DOM 节点 | string / HTMLElement | document.body |
| body | 同指令中的 body 修饰符 | boolean | false |
| fullscreen | 同指令中的 fullscreen 修饰符 | boolean | true |
| lock | 同指令中的 lock 修饰符 | boolean | false |
| text | 加载文案 | string | — |
| spinner | 自定义加载图标类名 | string | — |
| background | 遮罩背景色 | string | — |
| customClass | 自定义类名 | string | — |
| svg | 自定义 svg 元素 | string | — |
| svgViewBox | 自定义 svg 的 viewBox | string | — |
beforeClose 2.7.8 | 关闭前回调,返回 false 可阻止关闭 | () => boolean | — |
closed 2.7.8 | 完全关闭后的回调 | () => void | — |
指令修饰符
| 指令 | 说明 |
|---|---|
| v-loading | 是否显示加载动画 |
| v-loading.fullscreen | 全屏加载 |
| v-loading.lock | 锁定滚动 |
| v-loading.body | 将遮罩插入到 body |
| element-loading-text | 加载文案 |
| element-loading-spinner | 自定义加载图标 |
| element-loading-svg | 自定义 SVG 加载图标 |
| element-loading-svg-view-box | 自定义 SVG viewBox |
| element-loading-background | 背景色 |
| element-loading-custom-class | 自定义类名 |
更多配置参见 Element Plus Loading。
