需求:

        树形控件懒加载子节点,因子节点节点数量庞大,需要添加“加载更多”功能来加载余下节点数据。

解决方法:

        1、懒加载子节点时,后端根据当前配置显示条数,返回对应条数树节点信息,若判断有更多节点信息,则在最后返回信息中添加一条more的标识信息。(此处不作详细描述)

        2、前端懒加载子节点时,根据后端返回信息捕获到有more的标识信息,则在渲染子节点时处理该more的标识信息:

<span v-if="data.more" @click="onClickMore">
    <span v-if="!data.loading">加载更多...</span>
    <span v-else>正在加载中...</span>
</span>

在点击”加载更多“时触发onClickMore事件调用方法appendNodeMore():

appendNodeMore ({ node }) { // 此处的node为树形控件中点击的“加载更多”节点node信息
	this.$set(node.data, 'loading', true) ; // 添加加载中状态
	let treeRef = this.$refs['tree'] ; // 树形控件实例ref
	let { id, page } = node.data ; // id:需要加载更多的节点的父节点id; page:第几次加载更多(类似分页)
	
	this.$post('getMoreNode', { id, page: page+1 }) // 此处需要page+1加载下一个更多
	.then(r => {
		let _data = r.data || [] ;
		// 根据后端返回节点数据插入到树形控件中
		_data.reverse().forEach(item => {
			treeRef.insertAfter(item, node) ;
		}) ;
		treeRef.remove(node) ; // 删除“加载更多”
	})
	.catch(() => {
		this.$Message.error({content: '获取更多节点内容失败', duration: 3}) ;
	})
}

后端getMoreNode在获取到查询信息后,根据条件添加返回more的标识信息:

_total := _res['total'] ; // _total:数据库返回该子节点的所有条数
_info := _res['info'] ; // info:数据库分页查询出来的结果
// 判断当前返回的条数信息是否是最后的条数信息
if (_page*_pagesize) < _total then
begin
	_info.push({'more': true, 'page': _page, 'id': _id, 'isleaf': true}) ; // _id:需要加载更多的节点的父节点id;_page:当前第几次“加载更多”
end
return _info ;

3、总结:Element-Tree 树形控件中使用insertAfter()方法插入节点信息;使用remove(node)方法删除节点信息;后端返回more的标识信息。

GitHub 加速计划 / eleme / element
15
3
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45 1 年前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 1 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐