element ui中所谓table的延迟加载就是一次只显示一层数据
<el-table
:data="tableData"
style="width: 100%;margin-top: 10px;"
row-key="id"
border
lazy
:load="getChildrens"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="name" label="名称" width = '300' ></el-table-column>
</el-table>
row-key 是此表单必须需要的键。 唯一表示如果有id就必须使用id。
然后是数据属性,一般是第一层数据的来源
load方法是每次点击展开时启动的方法
首先请求第一个生命周期的top数据elementui 表格 数据,并给出与表数据属性绑定的tableData参数
如果item.hasChildren属性为true,则该数据后面会有一个可以展开的小箭头。 如果为 false,则不会显示。
created(){
getSystemMenuList(0).then((src) => {
if(src.status == 200) {
this.tableData = src.data.map((item, index) =>{
item.hasChildren = true;
return item
})
}
})
}
然后我们就编译load对应的getChildrens函数
getChildrens(tree,treeNode, resolve){
getSystemMenuList(tree.id).then((response) => {
var data
if(response.data.length&&response.data.length > 0){
let data = response.data.map((item, index) =>{
item.hasChildren = true;
return item
})
resolve(data)
}else{
tree.hasChildren = false
}
});
},
当点击某条数据后面的展开箭头时触发该函数
需要三个参数
第一条是引发风暴的数据
第二个我们不需要使用
第三个是返回给他的孩子数据
这里我们使用第一个参数,即触发风暴的数据的id来调整socket
然后判断socket返回的数据是否不为空,循环遍历其子集并将其hasChildren赋值为true,表示数据项可以进一步扩展
然后将调整后的子数据扔去解析elementui 表格 数据,使其显示为触发风暴数据的子集
如果数据没有被socket调用出来,并且数据为空,那么该数据没有子集,数据本身的第一个参数被赋给hasChildren为false,说明这个数据难以扩展。