html表格内容自动更新,ElementUI table 组件展开 expand,动态更新数据时,视图没有自动更新...

这是因为在给table的数据赋值时,展开的视图对应的字段不存在。(动态增加属性)

拿到table数据后,先把展开字段初始化,然后再赋值,问题就解决了~~

比如,之前是:this.list = api.getList()

改成:let list = api.getList()

list.forEach((item)=>{

item.detail = '' // 假设展开的字段是detail

})

this.list = list

我实际的代码大概是这样的,一个table套另一个table

:data="list"

@expand-change="onExpandChange">

{{scope.row.name}}

:current-page="scope.row.page||1"

:total="scope.row.total||0"

@current-change="(page)=>onSubtablePageChange(page, scope.row)">

先调一个接口拿list的数据,然后再掉一个接口拿list[i].subTable的数据,第一个接口的数据没有subTable这个字段,所以后来再赋值的时候视图没有自动更新,只要在第一次拿数据的时候给每个数据加上这个字段就可以了method: {

拿外层table数据

async getList() {

let params = {

page: this.page,

}

let res = await task.getTaskList(params)

/*这里是要加的代码,把展开的字段加上去就好了*/

res.rows.forEach(row => {

row.subTable = []

row.total = 0

})

this.list = res.rows

this.total = res.total

},

拿展开的subtable数据

async getSubtable(row) {

let params = {

id: row.id,

page: row.page

}

if (!row || !row.id) {

return

}

let res = await task.getSubtable(params)

row.subTable = res.rows

row.total = res.total

},

}

-----------------分割线,下面的内容是之前写的,能解决问题,但是这种方法不好------------------

在更新数据后,调用一下this.$refs.table.toggleRowExpansion()就好了

/// 这不是“正确”的解决方法,只是我做了很多尝试之后试出来的一个 hack,很凑巧地能解决问题……

// 看源码,调用 toggleRowExpansion 方法,源码里会调用this.scheduleLayout(); 再调用 this.table.debouncedUpdateLayout(); 然后视图就更新了……

这样的页面:

f0bafa6626140aa59f196047a4d2c7ca.png

代码:

// 省略其他代码

>

async getSubTable(row) {

let params = {

id: row.id,

page: row.page

}

let res = await task.getSubTable(params)

row.detail = res.rows

row.total = res.total

this.$refs.table.toggleRowExpansion()

},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值