如何在 Vuetify 中使用按钮折叠 v-treeview?

How to collapse a v-treeview with a button in Vuetify?

如何使用按钮折叠树视图?

我试过这个:

<v-btn @click="expanded ? (expanded = false) : (expanded = true)"
    ><v-icon>{{
        expanded ? 'mdi-arrow-collapse-all' : 'mdi-arrow-expand-all'
    }}</v-icon></v-btn
>
<v-treeview
    :items="branches"
    :open-all="expanded"
/>
<script>
export default {
    data() {
        return {
            expanded: true,
            branches: [...],
        }
    }
}
</script>

但我无法使 open-all 道具正常工作。

您可以添加 v-treeview 组件的 ref to the treeview, and use the updateAll(boolean) function

<v-treeview
  :items="branches"
  :open-all="expanded"
  ref="myTreeview"
/>

<v-btn @click="toggleTreeview">
  <v-icon>{{ expanded ? 'mdi-arrow-collapse-all' : 'mdi-arrow-expand-all'}}</v-icon>
</v-btn>
<script>
export default {
  data() {
    return {
      expanded: true,
      branches: [...],
    }
  },
  methods: {
    toggleTreeview() {
      this.expanded = !this.expanded;
      this.$refs.mytreeview.updateAll(this.expanded); 
    },
  }
}
</script>

这是一个示例 demo at codesandbox

我终于解决了我的问题,如下所示,只打开 第一个深度

首先,我将 <template> 中的按钮更改为:

<v-btn @click="toggleTreeview()"
    ><v-icon>{{
        open.length
            ? 'mdi-arrow-collapse-all'
            : 'mdi-arrow-expand-all'
    }}</v-icon>
</v-btn>

然后,我将这些道具用于 <v-treeview>:

<v-treeview
    :items="branches"
    item-key="id"
    :open.sync="open"
/>

我删除了 expanded 并添加了 open 数组:

<script>
export default {
    data() {
        return {
            branches: [...],
            open: []
        }
    }
}
</script>

最后,我使用此方法切换树视图(换句话说,填充或清空 open 数组):

methods: {
    toggleTreeview() {
        this.open.length
            ? (this.open = [])
            : this.branches.forEach((element) => this.open.push(element.id))
    },
}