在表格等容器中加載數據時顯示。
Element 提供了兩種調用 Loading 的方法:指令和服務。
一、指令方式:
1.對於自定義指令v-loading
,只需要綁定Boolean
即可。默認狀況下,Loading 遮罩會插入到綁定元素的子節點,通過添加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> <style> body { margin: 0; } </style> <script> export default { data() { return { tableData: [{ date: '2016-05-03', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }, { date: '2016-05-02', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }], loading: true }; } }; </script>
2.自定義:可自定義加載文案、圖標和背景色。

在綁定了
v-loading
指令的元素上添加
element-loading-text
屬性,其值會被渲染為加載文案,並顯示在加載圖標的下方。類似地,
element-loading-spinner
和
element-loading-background
屬性分別用來設定圖標類名和背景色值。
<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%"> <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: '上海市普陀區金沙江路 1518 弄' }, { date: '2016-05-02', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }], loading: true }; } }; </script>
3.整頁加載
頁面數據加載時顯示。
當使用指令方式時,全屏遮罩需要添加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 還可以以服務的方式調用。引入 Loading 服務:
import { Loading } from 'element-ui';
在需要調用時:
Loading.service(options);
其中 options
參數為 Loading 的配置項,具體見下表。LoadingService
會返回一個 Loading 實例,可通過調用該實例的 close
方法來關閉它:
let loadingInstance = Loading.service(options); this.$nextTick(() => { // 以服務的方式調用的 Loading 需要異步關閉 loadingInstance.close(); });
需要注意的是,以服務的方式調用的全屏 Loading 是單例的:若在前一個全屏 Loading 關閉前再次調用全屏 Loading,並不會創建一個新的 Loading 實例,而是返回現有全屏 Loading 的實例:
let loadingInstance1 = Loading.service({ fullscreen: true }); let loadingInstance2 = Loading.service({ fullscreen: true }); console.log(loadingInstance1 === loadingInstance2); // true
此時調用它們中任意一個的 close
方法都能關閉這個全屏 Loading。
如果完整引入了 Element,那么 Vue.prototype 上會有一個全局方法 $loading
,它的調用方式為:this.$loading(options)
,同樣會返回一個 Loading 實例。
Options
參數 | 說明 | 類型 | 可選值 | 默認值 |
---|---|---|---|---|
target | Loading 需要覆蓋的 DOM 節點。可傳入一個 DOM 對象或字符串;若傳入字符串,則會將其作為參數傳入 document.querySelector 以獲取到對應 DOM 節點 |
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 | — | — |