element ui table展开加载明细table无数据

           <el-table  :data="orderMainData"
                       @expand-change = "DataExpand"
                      >
                     <el-table-column type="expand" prop="children">
                        <template slot-scope="scope">
                             <el-table :data="scope.row.children" >
                                  <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
  <el-table-column prop="rfqCode" label="产品名" width="95"  align="left"
                                 show-overflow-tooltip>
                </el-table-column>
                <el-table-column prop="validDate" label="单价" width="95"  align="left" :formatter="dateFormatter"
                                 show-overflow-tooltip></el-table-column>
               <el-table-column prop="validDate" label="数量" width="95"  align="left" :formatter="dateFormatter"
                                 show-overflow-tooltip></el-table-column>
                              </el-table>
                        </template>
                        </el-table-column>
                <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
                            <el-table-column prop="code" label="订单编号" width="150"  align="left"
                                   show-overflow-tooltip></el-table-column>
                                   <el-table-column prop="customerName" label="客户名" width="160"  align="left"
                                   ></el-table-column>
            </el-table>

此处想要对订单行进行展开,然后重后端获取订单明细显示。在expand="expand"的列,定义了一个字段“children” ---此时返回的orderMainData是没有这个字段的(注意,这样是会产生BUG的)。

        DataExpand(row, expandedRows){
            console.log('expand')
            let _this = this
            let findObj = _this.$lodash.find(expandedRows,
            function(o) { 
                return o.code=== row.code; 
            })
            if(!findObj){}
            else{
                _this.$http('/getOrderDetail', parmas).then(data => {
                    row.children = data
                }).catch(err => {
                    _this.$message.error(err.msg);
                })
            }
        }

到这里,代码就完成了,每行展开,获得到订单的明细table 。
然而此时有个bug 。那就是有时候点击展开,后台是返回了数据,可是"明细table"里面却没数据。此时点击第二行时,刚才点击的第一行却又有数据显示出来了。
出现这种bug的原因是“orderMainData没有children字段”,第一次点击时,后端数据没返回来之前(没执行row.children = data)前,DOM渲染就已经完成了(没有row.children),后来服务端返回了data,此时也不会自动渲染了。
所以只要在一开始就在orderMainData加上children字段,那么在DOM渲染完成了(有row.children,只是它对应着row.children=[]),然后后来执行row.children = data,vue也可以自动渲染到table。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,680评论 1 92
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,120评论 2 89
  • 1、树与数组转换对应的目录如下图所示: 1、树与数组转换 /* * @Author: zhr */ import...
    08f1b6c52d2a阅读 26,602评论 8 3
  • 吃过晚饭,按照平时的做法:安排俩孩子洗澡、洗自己的衣服、看电视、睡前看会儿书、休息! 今天,自己突然想出去走走!儿...
    海深处阅读 3,056评论 0 4
  • 12月28日日精进:敬畏—进入—体验—交给—持续 1,缺啥补啥,怕啥练啥; 2,一切为我所用,所用为团队家; 3...
    54f0d725963c阅读 1,163评论 0 0