当前位置: 代码网 > it编程>前端脚本>Vue.js > Vue+ElementUI表格异步加载数据字段缺失:如何确保所有异步请求完成后再更新视图?

Vue+ElementUI表格异步加载数据字段缺失:如何确保所有异步请求完成后再更新视图?

2025年03月30日 Vue.js 我要评论
vue+elementui表格异步加载数据导致字段缺失的解决方案在使用vue和elementui构建应用时,异步数据加载常常会导致视图更新与数据加载时机不匹配,从而出现字段缺失等问题。本文将分析一个实

vue+elementui表格异步加载数据字段缺失:如何确保所有异步请求完成后再更新视图?

vue+elementui表格异步加载数据导致字段缺失的解决方案

在使用vue和elementui构建应用时,异步数据加载常常会导致视图更新与数据加载时机不匹配,从而出现字段缺失等问题。本文将分析一个实际案例,并提供有效的解决方案。

问题描述: 一个使用el-table组件显示申请记录的应用,数据需要通过多个异步请求获取。初始加载时,申请人姓名等关键字段缺失,只有在打开浏览器开发者工具(f12)后才显示。根本原因在于异步请求完成的时机与el-table渲染的时机不一致。

以下是一个存在问题的代码片段:

async getdata() {
    await axios.get("http://localhost:10100/apply/getalloutapplypageofgroup", {
        // ...请求参数...
    }).then(res => {
        this.tabledata = res.data.data.records;
        this.total = res.data.data.total;
    });

    for (let i = 0; i < this.tabledata.length; i++) {
        await axios.get("http://localhost:10100/user/getusername", {
            params: { userid: this.tabledata[i].applicantid }
        }).then(res => {
            this.tabledata[i].applicantname = res.data.data;
        });
        // ... 其他异步请求 ...
    }
}
登录后复制

getdata函数在mounted生命周期中调用。虽然使用了await,但它只等待每个单个请求完成,并非所有请求都完成后再更新视图。 this.tabledata赋值给el-table时,后续请求仍在进行,导致字段缺失。开发者工具的打开可能触发了页面重新渲染,从而显示完整数据。

解决方案:使用promise.all

为了确保所有异步请求完成后再更新视图,应将所有异步操作放在promise.all中。修改后的代码如下:

async getdata() {
    await axios.get("http://localhost:10100/apply/getalloutapplypageofgroup", {
        // ...请求参数...
    }).then(res => {
        this.tabledata = res.data.data.records;
        this.total = res.data.data.total;

        const promises = this.tabledata.map(item => promise.all([
            axios.get("http://localhost:10100/user/getusername", { params: { userid: item.applicantid } }),
            axios.get("http://localhost:10100/chemicals/getchemicalname", { params: { chemicalid: item.chemicalid } }),
            axios.get("http://localhost:10100/chemicals/getunit", { params: { chemicalid: item.chemicalid } })
        ]));

        promise.all(promises).then(results => {
            results.foreach((result, index) => {
                this.tabledata[index].applicantname = result[0].data.data;
                this.tabledata[index].chemicalname = result[1].data.data;
                this.tabledata[index].unit = result[2].data.data;
                // ... 其他字段处理 ...
            });
        });
    });
}
登录后复制

promise.all确保所有请求完成后再更新this.tabledata,从而解决数据显示不完整的问题,保证页面初始加载时显示所有字段。 这避免了异步操作与视图更新的时机冲突。

以上就是vue+elementui表格异步加载数据字段缺失:如何确保所有异步请求完成后再更新视图?的详细内容,更多请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com