要实现懒加载必须加 lazy 属性
<el-tree props="defaultProps" :load="loadNode" :expand-on-click-node="false" node-key="id" lazy accordion @node-click="handleNodeClick"></el-tree>
export default {
data () {
return {
treeData: [],
childTreeData: [],
defaultProps: {
label: "name",
id: "id"
},
detailTreeDate: [],
node_had: [], // 这里是关键!在data里面定义一个变量,将node.level == 0的node存起来
resolve_had: [], // 同上,把node.level == 0的resolve也存起来
},
methods:{
getTreeData(termSysId) {
// termSysId 下拉框选择值Id
let _this = this;
_this.$http({
url: _this.$http.adornUrl(_this.apiUrl.getTopVocabularyId),
method: 'get',
params: _this.$http.adornParams({'vocabularyId':_this.form.termSys},false)
}).then(({data}) => {
if (data && data.success == true) {
_this.treeData = data.data
_this.detailTreeDate = [];
_this.node_had.childNodes = []; // 把存起来的node的子节点清空,不然会界面会出现重复树!
_this.loadNode(_this.node_had, _this.resolve_had); // 再次执行懒加载的方法
} else {
_this.$message({
showClose: true,
message: data.msg,
type: 'error'
});
}
})
},
getChildrenNode(node, resolve) {
// 获取二级节点数据
let conceptId = node.data.id;
let _this = this;
_this.$http({
url: _this.$http.adornUrl(this.apiUrl.treeNavigate),
method: 'get',
params: _this.$http.adornParams({'id':conceptId},false)
}).then(({data}) => {
if (data && data.success == true) {
this.childTreeData = data.data
resolve(this.childTreeData);
} else {
_this.$message({
showClose: true,
message: data.msg,
type: 'error'
});
}
})
},
loadNode(node, resolve) {
if (node.level === 0) {
// 请求一级tree菜单
this.node_had = node; // 这里是关键!在data里面定义一个变量,将node.level == 0的node存起来
this.resolve_had = resolve; // 同上,把node.level == 0的resolve也存起来
return resolve(this.treeData);
}
if (node.level === 1 || node.level > 1) {
// 请求二级tree菜单及其他子级节点
this.getChildrenNode(node, resolve);
}
},
}
}}