默认情况下,展开所有对象';q-tree不工作?Vue.Js

默认情况下,展开所有对象';q-tree不工作?Vue.Js,vue.js,nodes,Vue.js,Nodes,我必须编写一个web应用程序,最重要的元素是q树。我已经能够加载和显示数据(传递一个名为list的数组),但我希望所有节点都展开 官方文档的vue.js示例表明,您可以使用“default expand all”属性来完成此操作,但这对我来说不起作用 它只显示带有箭头的根节点,在这里我必须手动展开子节点 <q-tree :nodes="list" :selected.sync="selected" @update:selected="onSelecti

我必须编写一个web应用程序,最重要的元素是q树。我已经能够加载和显示数据(传递一个名为list的数组),但我希望所有节点都展开

官方文档的vue.js示例表明,您可以使用“default expand all”属性来完成此操作,但这对我来说不起作用

它只显示带有箭头的根节点,在这里我必须手动展开子节点

    <q-tree
     :nodes="list"
     :selected.sync="selected"
     @update:selected="onSelectionChangedNode"
     node-key="NodeNr"
     label-key="NodeTxt"
     default-expand-all
    ></q-tree>

默认的“全部展开”仅应用于该组件的第一次渲染。 因此,如果您的组件在未指定节点时进行渲染,那么如果随后指定,它们将不会展开


如果第一次渲染时没有节点,则必须使用作用域插槽和扩展属性。

解决了我的问题,如下所示:

我已经向qtreedom元素添加了ref属性,这使得访问qtreeapi的预定义方法成为可能

      <q-tree
        :nodes="list"
        :selected.sync="selected"
        @update:selected="onSelectionChangedNode"
        node-key="NodeNr"
        label-key="NodeTxt"
        **ref="nodes"**
      >
对我来说最重要的是,我必须找出哪个生命周期钩子适合我。update()钩子就是我要找的那个

原因是:

在数据更改后调用会导致重新呈现虚拟DOM并 打补丁

调用此钩子时,组件的DOM将被更新,因此 可以在此处执行依赖于DOM的操作


根据接受的答案,我意识到dom已经在第一次渲染时使用树组件创建

在我的用例中,我希望在数据从服务器返回时更新树。 因此,我不得不使用
扩展的
功能强制它重新渲染,使用:

this.$nextTick(function () {
              this.$refs.nodes.expandAll();
            })
nextTick函数将在下一个执行窗口中更新dom,此时节点将通过调用
expandAll
函数进行扩展

注意:对于那些对ref属性上的星号或如何将其添加到组件感到困惑的人,下面是:

<q-tree :nodes="list"
        :selected.sync="selected"
        @update:selected="onSelectionChangedNode"
        node-key="NodeNr"
        label-key="NodeTxt"
        ref="nodes"
      >

<q-tree :nodes="list"
        :selected.sync="selected"
        @update:selected="onSelectionChangedNode"
        node-key="NodeNr"
        label-key="NodeTxt"
        ref="nodes"
      >