iview tree组件 loadData 异步加载事件中遇到的小问题,记录下来以免忘记
:data=“treeData” 指的是需要渲染的树结构,由于是使用异步加载.所以需要留一个初始值作为入口.
treeData: {
id: 0,
title: ‘root’,
loading: false,
expand: false,
children: [ ],
}
需要注意的是,以上几个属性都是必须的.并且children必须是 [ ],用来填装后台返回的数据.
如果缺少 children = []; loading = false;这两个属性的话,是不会应用异步加载效果。(另外,如果网络超时之类的一直接受不到后台返回的数据的话,需要将loading 再次重置为 false);
在项目中,由于当时后台返回的数据当中,并没有loading,expand属性.于是做了一个递归去添加.然而添加之后发现并没有用.后面查了资料之后,发现需要用vue.$set方法去操作.
treeExpand ( treeData: any [], flag: Boolean ) {
for (const i of treeData) {
this.$set( i, 'expand', flag );
this.$set( i, 'loading', false );
if (i.children) {
i.children = this.treeExpand(i.children,flag);
}
}
return treeData;
}
vue.set方法主要是设置对象属性,确保属性被创建后也是响应式的, 同时会触发视图更新