加載數(shù)據(jù)時顯示動效。
在表格等容器中加載數(shù)據(jù)時顯示。
Element Plus 提供了兩種調(diào)用 Loading 的方法:指令和服務。對于自定義指令v-loading,只需要綁定Boolean即可。默認狀況下,Loading 遮罩會插入到綁定元素的子節(jié)點,通過添加body修飾符,可以使遮罩插入至 DOM 中的 body 上。
<template>
<el-table v-loading="loading" :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
{
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
],
loading: true,
}
},
}
</script>
<style>
body {
margin: 0;
}
</style>
可自定義加載文案、圖標和背景色。
在綁定了v-loading指令的元素上添加?element-loading-text
?屬性,其值會被渲染為加載文案,并顯示在加載圖標的下方。類似地,?element-loading-spinner
?、?element-loading-background
?和?element-loading-svg
?屬性分別用來設定圖標類名、背景色值、加載圖標。
<template>
<el-table
v-loading="loading"
element-loading-text="拼命加載中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
:data="tableData"
style="width: 100%;margin-bottom: 10px"
>
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
<el-table
v-loading="loading"
:element-loading-svg="svg"
class="custom-loading-svg"
element-loading-svg-view-box="-10, -10, 50, 50"
:data="tableData"
style="width: 100%"
>
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
{
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區(qū)金沙江路 1518 弄',
},
],
loading: true,
svg: `
<path class="path" d="
M 30 15
L 28 17
M 25.61 25.61
A 15 15, 0, 0, 1, 15 30
A 15 15, 0, 1, 1, 27.99 7.5
L 15 15
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>
`,
}
},
}
</script>
<style>
.custom-loading-svg .el-loading-mask > .el-loading-spinner > .circular {
animation: none;
}
</style>
element-loading-svg 屬性雖然支持傳入 HTML 片段,但是在網(wǎng)站上動態(tài)渲染任意 HTML 是非常危險的,因為容易導致 XSS 攻擊。請確保 element-loading-svg 的內(nèi)容是可信的,永遠不要將用戶提交的內(nèi)容賦值給 element-loading-svg 屬性。
頁面數(shù)據(jù)加載時顯示。
當使用指令方式時,全屏遮罩需要添加fullscreen修飾符(遮罩會插入至 body 上),此時若需要鎖定屏幕的滾動,可以使用lock修飾符;當使用服務方式時,遮罩默認即為全屏,無需額外設置。
<template>
<el-button
type="primary"
@click="openFullScreen1"
v-loading.fullscreen.lock="fullscreenLoading"
>
指令方式
</el-button>
<el-button type="primary" @click="openFullScreen2"> 服務方式 </el-button>
</template>
<script>
export default {
data() {
return {
fullscreenLoading: false,
}
},
methods: {
openFullScreen1() {
this.fullscreenLoading = true
setTimeout(() => {
this.fullscreenLoading = false
}, 2000)
},
openFullScreen2() {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
})
setTimeout(() => {
loading.close()
}, 2000)
},
},
}
</script>
Loading 還可以以服務的方式調(diào)用。引入 Loading 服務:
import { ElLoading } from 'element-plus'
JS
在需要調(diào)用時:
ElLoading.service(options)
JS
其中 options 參數(shù)為 Loading 的配置項,具體見下表。LoadingService 會返回一個 Loading 實例,可通過調(diào)用該實例的 close 方法來關(guān)閉它:
let loadingInstance = ElLoading.service(options)
this.$nextTick(() => {
// 以服務的方式調(diào)用的 Loading 需要異步關(guān)閉
loadingInstance.close()
})
JS
需要注意的是,以服務的方式調(diào)用的全屏 Loading 是單例的:若在前一個全屏 Loading 關(guān)閉前再次調(diào)用全屏 Loading,并不會創(chuàng)建一個新的 Loading 實例,而是返回現(xiàn)有全屏 Loading 的實例:
let loadingInstance1 = ElLoading.service({ fullscreen: true })
let loadingInstance2 = ElLoading.service({ fullscreen: true })
console.log(loadingInstance1 === loadingInstance2) // true
JS
此時調(diào)用它們中任意一個的 close 方法都能關(guān)閉這個全屏 Loading。
如果完整引入了 Element,那么 app.config.globalProperties 上會有一個全局方法 $loading,它的調(diào)用方式為:this.$loading(options),同樣會返回一個 Loading 實例。
參數(shù) | 說明 | 類型 | 可選值 | 默認值 |
---|---|---|---|---|
target | Loading 需要覆蓋的 DOM 節(jié)點??蓚魅胍粋€ DOM 對象或字符串;若傳入字符串,則會將其作為參數(shù)傳入 document.querySelector 以獲取到對應 DOM 節(jié)點 | object/string | — | document.body |
body | 同 v-loading 指令中的 body 修飾符 | boolean | — | false |
fullscreen | 同 v-loading 指令中的 fullscreen 修飾符 | boolean | — | true |
lock | 同 v-loading 指令中的 lock 修飾符 | boolean | — | false |
text | 顯示在加載圖標下方的加載文案 | string | — | — |
spinner | 自定義加載圖標類名 | string | — | — |
background | 遮罩背景色 | string | — | — |
customClass | Loading 的自定義類名 | string | — | — |
更多建議: