You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式触发Quasar QTree的lazyLoad事件?

Quasar QTree 重新加载懒加载子节点的解决方案

要解决QTree懒加载子节点的重新加载问题,核心是重置QTree内部记录的节点加载状态,再触发懒加载事件。以下是两种可行方案:

方案一:重置节点内部加载状态元数据

QTree会给每个懒加载节点添加__qtree内部属性跟踪加载状态,手动重置该状态后,通过展开操作即可触发lazyLoad:

import { nextTick } from 'vue'

const docTree = ref(null)

async function reloadNodeChildren(targetNode) {
  const treeInstance = docTree.value
  if (!treeInstance || !targetNode) return

  // 重置节点的加载状态元数据
  targetNode.__qtree = targetNode.__qtree || {}
  targetNode.__qtree.loaded = false // 标记为未加载
  targetNode.__qtree.loading = false // 标记为不在加载中

  // 若节点已展开,先折叠再展开触发重新加载
  if (treeInstance.isExpanded(targetNode)) {
    treeInstance.setExpanded(targetNode, false)
    await nextTick()
  }
  treeInstance.setExpanded(targetNode, true)
}

注意:__qtree是Quasar内部属性,框架版本更新可能调整其结构,升级时需验证兼容性。

方案二:通过更新节点key强制重新渲染

利用Vue的key更新机制,修改目标节点的key值让QTree重新渲染节点,展开时会自动触发lazyLoad:

import { nextTick } from 'vue'

const docTree = ref(null)

async function reloadNodeChildren(targetNode) {
  const treeInstance = docTree.value
  if (!treeInstance || !targetNode) return

  // 给节点key添加时间戳,强制组件重新渲染
  targetNode.key = `${targetNode.id}-${Date.now()}` // 假设节点有唯一id属性

  // 重新触发展开操作
  if (treeInstance.isExpanded(targetNode)) {
    treeInstance.setExpanded(targetNode, false)
    await nextTick()
  }
  treeInstance.setExpanded(targetNode, true)
}

这种方法不依赖框架内部属性,兼容性更好,推荐优先使用。

关键注意点

  • 调用方法时需确保targetNode是QTree数据源中存在的节点对象(若使用node-key属性,也可传递节点id);
  • 必须等待nextTick完成后再执行展开操作,确保DOM状态更新完成。

内容的提问来源于stack exchange,提问作者user1398498

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:38:32