我的下载按钮并不是绑定一个数据源的,而是根据点击下载按钮得到当前行的某些字段去后端查找对应的数据返回前端才导出为excel的,
加载完这一个页面,比如点击第一行的下载按钮,点击的第一下是没有任何反应的,但是数据已经从后端返回到前端了,在控制台打印出来了,打印的数据也是对的。再第二次点击第一行的下载按钮,页面才回用反应,才会将数据导出为excel。但是我接着点击第二行的下载按钮,导出的excel内容却是第一行的数据。在点击第三行的下载按钮,导出的excel内容却是第二行的数据。
我每点击一次下载按钮,控制台会打印对应行的对应的数据,导出的时候就是不对,求解为什么点击下载按钮,导出的excel却不是对应的数据,而是上一次点击下载按钮对应的数据
<el-table-column align="center" label="操作" min-width="200">
<template slot-scope="scope">
<download-excel :data="jsonData" name="xxxx.xls">
<el-button type="primary" size="mini" @click="download(scope.$index, scope.row)">下载</el-button>
</download-excel>
<el-button size="mini" type="danger" @click="delImportManagement(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
if(row.dataType == 'xxx'){
geShuidownloadButton(row.month).then((res => {
this.jsonData = []
for(let o of res.data.data){
this.jsonData.push({
"工号": o.jobNumber,
})
}
}))
}
if(row.dataType == 'xx'){
downloadButton(row.month,row.dataType).then((res => {
this.jsonData = []
for(let i of res.data.data){
this.jsonData.push({
"工号":i.jobNumber,
})
}
}))
}
并没有报错
我点击哪一行的下载按钮,哪一行的数据就会导出问excel文件
说明你传参的顺序有问题,换一下代码的调用顺序。
已经解决了 参考了这位老师 https://blog.csdn.net/qq_45472675/article/details/120314344
结论:同步异步获取和处理数据的问题。
用settimeout模拟异步获取数据,可以猜测到download-excel是同步处理的。
第一次点击没有效果,可能是因为同步情况还没有获取到数据,而download-excel不处理空的数组。
ps:你要获取一行的数据,可以不用再发一次请求呀。你初始进入页面肯定发过一次请求获取到了所有表格数据并且渲染出来。
你传入了scope.row,这个就代表表格的一行数据。你只想打印一行数据中的某些字段,那你就在push的时候做处
理就好了。想下面这样: