0

0

Vue+ElementUI表格异步加载导致字段缺失:如何解决数据渲染与加载时机不匹配问题?

DDD

DDD

发布时间:2025-03-05 09:04:14

|

961人浏览过

|

来源于php中文网

原创

vue+elementui表格异步加载导致字段缺失:如何解决数据渲染与加载时机不匹配问题?

Vue+ElementUI表格异步加载字段缺失问题详解及解决方案

在Vue和ElementUI项目中,异步加载数据经常导致表格部分字段缺失,本文将深入分析此问题,并提供有效的解决方案。

问题描述:

使用el-table组件显示数据时,从后端获取部分数据(例如申请人ID),然后通过异步请求获取剩余字段(例如申请人姓名、化学品名称等),并动态添加到表格数据中。然而,这些异步获取的字段在页面首次渲染时缺失,只有在打开浏览器开发者工具后才显示。

立即学习前端免费学习笔记(深入)”;

问题根源:

问题在于数据渲染和异步加载的时机不匹配。el-table组件根据初始数据进行渲染,而异步请求获取的数据在渲染完成后才返回。 如果使用循环异步请求,每个请求的完成时间不一致,导致el-table渲染时数据不完整。

ghiblitattoo
ghiblitattoo

用AI创造独特的吉卜力纹身

下载

代码分析及改进:

原始代码可能使用了循环和多个await axios.get请求,导致异步操作串行执行,效率低下且容易出现数据加载时机问题。

改进方案:使用Promise.all将所有异步请求并行执行,确保所有数据都获取完成后再更新表格数据。

优化后的代码示例:

async getData() {
    await axios.get("http://localhost:10100/Apply/getAllOutApplyPageOfGroup", {
        params: {
            approvalId: localStorage.getItem("userId"),
            pn: this.currentPage,
            ps: this.pageSize
        }
    }).then(res => {
        const records = res.data.data.records;
        this.total = res.data.data.total;

        // 使用 Promise.all 并行获取所有数据
        Promise.all(records.map(record => Promise.all([
            axios.get("http://localhost:10100/User/getUserName", { params: { userId: record.applicantId } }),
            axios.get("http://localhost:10100/Chemicals/getChemicalName", { params: { chemicalId: record.chemicalId } }),
            axios.get("http://localhost:10100/Chemicals/getUnit", { params: { chemicalId: record.chemicalId } })
        ]).then(results => ({
            ...record,
            applicantName: results[0].data.data,
            chemicalName: results[1].data.data,
            unit: results[2].data.data,
            passName: getApprovalStatus(record.isPass) // 使用辅助函数提高代码可读性
        })))).then(updatedRecords => {
            this.tableData = updatedRecords;
        });
    });
}

// 辅助函数,提高代码可读性
function getApprovalStatus(status) {
    switch (status) {
        case "0": return "审核中";
        case "1": return "拒绝";
        case "2": return "同意";
        default: return "";
    }
}

通过Promise.all,所有异步请求同时进行,并在全部完成之后一次性更新this.tableData,从而确保el-table组件渲染时拥有完整的数据,解决字段缺失问题。 此外,代码还使用了辅助函数getApprovalStatus,提高了代码的可读性和可维护性。

通过以上改进,可以有效解决Vue+ElementUI表格异步加载导致字段缺失的问题,确保数据完整性和页面渲染的同步性。

相关专题

更多
promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

302

2023.10.12

html文本框类型介绍
html文本框类型介绍

html文本框类型有单行文本框、密码文本框、数字文本框、日期文本框、时间文本框、文件上传文本框、多行文本框等等。详细介绍:1、单行文本框是最常见的文本框类型,用于接受单行文本输入,用户可以在文本框中输入任意文本,例如用户名、密码、电子邮件地址等;2、密码文本框用于接受密码输入,用户在输入密码时,文本框中的内容会被隐藏,以保护用户的隐私;3、数字文本框等等。

401

2023.10.12

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 7万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号