【问题标题】:return-object in Treeview causes "Maximum call stack size exceeded" VuetifyTreeview 中的返回对象导致“超出最大调用堆栈大小”Vuetify
【发布时间】:2019-03-15 17:22:25
【问题描述】:

我有一个Treeview,我有兴趣在选择节点后访问整个对象。在 treeview 中,有一个名为return-object 的属性可以很好地做到这一点。

return-object: 当为 true 时将生成 v-modelactive.syncopen.sync 返回完整的对象,而不仅仅是键。

但是当我尝试这样做时,我得到了这个错误:超过了最大调用堆栈大小。

有人知道为什么会这样吗?

 <v-treeview
        v-model="selected"
        return-object
        item-text="node.text"
        :items="all"
        activatable 
        open-on-click
        selectable>
</v-treeview>

all: [
{
    "node": {
        "text": "child1",
        "instances": ["test1"],
        "props":[{
            "text":"some",
            "instance": ["text"]
        }]
    },
    "children": [
        {
            "node": {
                "text": "child2",
                "instances": [ "test"],
                "props":[{
                      "text":"some",
                        "instance": ["text"]
                    }]
            }
        }
    ]
  }]

感谢您的帮助。

【问题讨论】:

  • 你能告诉我们:items="all"里有什么吗?
  • 我用我的数据更新了问题。实际数据比这个大。它只是显示结构
  • 实际数据是否比这个结构更深?多远?看看stackoverflow.com/questions/6095530/…
  • 是的,但我尝试使用一点也不大的硬编码数据。同样的问题

标签: object vue.js treeview vuetify.js


【解决方案1】:

显然items prop 提供的数据格式与Treeview component 不兼容(请参阅VTreeviewNodeProps 以获取支持的节点属性列表)。这就是为什么一旦节点被选中就会出现指定错误的原因。

鉴于提供的数据格式,可以使用以下函数将数据转换为支持的格式:

getNodes(items){
   return items.map(item => ({
    id: item.node.text,
    name: item.node.text,
    children: item.children ? this.getNodes(item.children) : []
  }))
} 

示例

<template>
  <div>
    <v-treeview v-model="selected" selectable open-on-click :items="items"></v-treeview>
    <pre>{{ selected }}</pre>
  </div>
</template>


<script>

const all = [...]


export default {

  data: () => ({
    selected: [],
  }),
  computed: {
    items() {
      return this.getNodes(all)
    }
  },
  methods: {
    getNodes(items){
       return items.map(item => ({
        id: item.node.text,
        name: item.node.text,
        children: item.children ? this.getNodes(item.children) : []
      }))
    } 
  }
};
</script>

Demo

【讨论】:

  • @DjSh,事实上 Treeview 需要以下数据格式:[{id: &lt;id&gt;, name: &lt;name&gt;,...,children: [...]}, ...]
  • 我想你忘了将return-object 添加到你的Treeview
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2014-11-17
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
相关资源
最近更新 更多