加載數(shù)據(jù)時(shí)顯示動(dòng)效。
在表格等容器中加載數(shù)據(jù)時(shí)顯示。
Element Plus 提供了兩種調(diào)用 Loading 的方法:指令和服務(wù)。對(duì)于自定義指令v-loading,只需要綁定Boolean即可。默認(rèn)狀況下,Loading 遮罩會(huì)插入到綁定元素的子節(jié)點(diǎn),通過(guò)添加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>
可自定義加載文案、圖標(biāo)和背景色。
在綁定了v-loading指令的元素上添加?element-loading-text
?屬性,其值會(huì)被渲染為加載文案,并顯示在加載圖標(biāo)的下方。類似地,?element-loading-spinner
?、?element-loading-background
?和?element-loading-svg
?屬性分別用來(lái)設(shè)定圖標(biāo)類名、背景色值、加載圖標(biāo)。
<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)站上動(dòng)態(tài)渲染任意 HTML 是非常危險(xiǎn)的,因?yàn)槿菀讓?dǎo)致 XSS 攻擊。請(qǐng)確保 element-loading-svg 的內(nèi)容是可信的,永遠(yuǎn)不要將用戶提交的內(nèi)容賦值給 element-loading-svg 屬性。
頁(yè)面數(shù)據(jù)加載時(shí)顯示。
當(dāng)使用指令方式時(shí),全屏遮罩需要添加fullscreen修飾符(遮罩會(huì)插入至 body 上),此時(shí)若需要鎖定屏幕的滾動(dòng),可以使用lock修飾符;當(dāng)使用服務(wù)方式時(shí),遮罩默認(rèn)即為全屏,無(wú)需額外設(shè)置。
<template>
<el-button
type="primary"
@click="openFullScreen1"
v-loading.fullscreen.lock="fullscreenLoading"
>
指令方式
</el-button>
<el-button type="primary" @click="openFullScreen2"> 服務(wù)方式 </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 還可以以服務(wù)的方式調(diào)用。引入 Loading 服務(wù):
import { ElLoading } from 'element-plus'
JS
在需要調(diào)用時(shí):
ElLoading.service(options)
JS
其中 options 參數(shù)為 Loading 的配置項(xiàng),具體見(jiàn)下表。LoadingService 會(huì)返回一個(gè) Loading 實(shí)例,可通過(guò)調(diào)用該實(shí)例的 close 方法來(lái)關(guān)閉它:
let loadingInstance = ElLoading.service(options)
this.$nextTick(() => {
// 以服務(wù)的方式調(diào)用的 Loading 需要異步關(guān)閉
loadingInstance.close()
})
JS
需要注意的是,以服務(wù)的方式調(diào)用的全屏 Loading 是單例的:若在前一個(gè)全屏 Loading 關(guān)閉前再次調(diào)用全屏 Loading,并不會(huì)創(chuàng)建一個(gè)新的 Loading 實(shí)例,而是返回現(xiàn)有全屏 Loading 的實(shí)例:
let loadingInstance1 = ElLoading.service({ fullscreen: true })
let loadingInstance2 = ElLoading.service({ fullscreen: true })
console.log(loadingInstance1 === loadingInstance2) // true
JS
此時(shí)調(diào)用它們中任意一個(gè)的 close 方法都能關(guān)閉這個(gè)全屏 Loading。
如果完整引入了 Element,那么 app.config.globalProperties 上會(huì)有一個(gè)全局方法 $loading,它的調(diào)用方式為:this.$loading(options),同樣會(huì)返回一個(gè) Loading 實(shí)例。
參數(shù) | 說(shuō)明 | 類型 | 可選值 | 默認(rèn)值 |
---|---|---|---|---|
target | Loading 需要覆蓋的 DOM 節(jié)點(diǎn)。可傳入一個(gè) DOM 對(duì)象或字符串;若傳入字符串,則會(huì)將其作為參數(shù)傳入 document.querySelector 以獲取到對(duì)應(yīng) DOM 節(jié)點(diǎn) | object/string | — | document.body |
body | 同 v-loading 指令中的 body 修飾符 | boolean | — | false |
fullscreen | 同 v-loading 指令中的 fullscreen 修飾符 | boolean | — | true |
lock | 同 v-loading 指令中的 lock 修飾符 | boolean | — | false |
text | 顯示在加載圖標(biāo)下方的加載文案 | string | — | — |
spinner | 自定義加載圖標(biāo)類名 | string | — | — |
background | 遮罩背景色 | string | — | — |
customClass | Loading 的自定義類名 | string | — | — |
更多建議: