导读:本期聚焦于小伙伴创作的《el-table数据为空时显示“数据加载中”的两种实现方案详解与对比》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《el-table数据为空时显示“数据加载中”的两种实现方案详解与对比》有用,将其分享出去将是对创作者最好的鼓励。

El-table表格数据为空时显示“数据加载中”的实现方案

在使用Element UI的el-table组件开发后台管理系统表格功能时,经常会遇到这样的场景:表格初始状态数据为空,此时需要提示用户“数据加载中”,而不是显示空白区域;当数据加载完成后再正常渲染表格内容。本文将介绍两种常用的实现方案,帮助开发者快速解决该问题。

方案一:使用empty插槽自定义空状态内容

el-table组件提供了empty插槽,用于自定义表格数据为空时的展示内容。我们可以结合数据加载状态,动态切换插槽内的显示内容。

实现步骤

  • 定义表格数据数组tableData和加载状态标识loading

  • el-table中使用empty插槽,根据loading状态判断显示内容

  • 数据请求完成后更新tableDataloading状态

代码示例

<template>
  <div class="table-container">
    <el-table
      :data="tableData"
      border
      style="width: 100%">
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="age"
        label="年龄"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
      <!-- 自定义空状态插槽 -->
      <template #empty>
        <div v-if="loading" class="loading-tip">
          数据加载中...
        </div>
        <div v-else class="empty-tip">
          暂无数据
        </div>
      </template>
    </el-table>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import { getTableData } from './api'; // 假设的数据请求方法

export default {
  setup() {
    const tableData = ref([]);
    const loading = ref(false);

    const fetchData = async () => {
      loading.value = true;
      try {
        const res = await getTableData();
        tableData.value = res.data || [];
      } catch (err) {
        console.error('数据请求失败', err);
        tableData.value = [];
      } finally {
        loading.value = false;
      }
    };

    onMounted(() => {
      fetchData();
    });

    return {
      tableData,
      loading
    };
  }
};
</script>

<style scoped>
.loading-tip {
  color: #909399;
  font-size: 14px;
  padding: 40px 0;
}
.empty-tip {
  color: #909399;
  font-size: 14px;
  padding: 40px 0;
}
</style>

方案二:使用el-table的loading属性全局加载

如果希望“数据加载中”的提示覆盖整个表格区域,而不是仅显示在表格内容区域,可以使用el-tableloading属性,配合el-loading指令实现全表格加载提示。

实现步骤

  • el-table添加:loading="loading"属性

  • 通过element-loading-text属性设置加载提示文本为“数据加载中”

  • 数据请求时设置loading为true,请求完成后设置为false

代码示例

<template>
  <div class="table-container">
    <el-table
      :data="tableData"
      :loading="loading"
      element-loading-text="数据加载中"
      border
      style="width: 100%">
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="age"
        label="年龄"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import { getTableData } from './api';

export default {
  setup() {
    const tableData = ref([]);
    const loading = ref(false);

    const fetchData = async () => {
      loading.value = true;
      try {
        const res = await getTableData();
        tableData.value = res.data || [];
      } catch (err) {
        console.error('数据请求失败', err);
        tableData.value = [];
      } finally {
        loading.value = false;
      }
    };

    onMounted(() => {
      fetchData();
    });

    return {
      tableData,
      loading
    };
  }
};
</script>

两种方案对比

方案适用场景优点缺点
empty插槽方案希望加载提示仅在表格内容区域显示,且需要区分“加载中”和“无数据”两种空状态自定义程度高,可灵活控制不同空状态的展示内容仅显示在表格内容区域,若表格高度固定且内容区域较小,提示可能不够明显
loading属性方案希望加载提示覆盖整个表格区域,用户感知更明显实现简单,无需额外自定义插槽,提示覆盖全表格,视觉优先级高仅能显示加载状态,无法区分“加载中”和“无数据”两种空状态,数据为空且加载完成后会直接显示默认空提示

注意事项

  • 两种方案都需要正确管理loading状态,确保数据请求完成(无论成功或失败)后都将loading设为false,避免出现加载状态一直显示的问题

  • 如果表格有固定的高度设置,使用empty插槽方案时需注意空状态内容的垂直居中样式,避免提示内容显示位置异常

  • 若需要兼容更早版本的Element UI,需注意插槽语法的差异,旧版本可能使用slot="empty"的写法而非#empty

开发者可以根据实际业务场景选择合适的方案,若需要同时区分加载中和无数据两种状态,推荐使用第一种empty插槽方案;若仅需要全表格加载提示,第二种方案实现成本更低。

el-table 数据加载中 empty插槽 loading属性 ElementUI

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。