【问题标题】:How to set multiple item-children property for v-treeview如何为 v-treeview 设置多个 item-children 属性
【发布时间】:2021-10-11 06:00:34
【问题描述】:

假设我有如下结构的可变项目:

[
  {
    id: 1,
    name: 'value1',
    item_nested: [
      {
        id: 2,
        name: 'value2',
      },
      {
        id: 3,
        name: 'value3',
        nested_item: [
          {
            id: 4,
            name: 'value4'
          }
        ]
      }
    ]
  }
]

在 v-treeview 中,我们有带有字符串的道具 item-children,它允许设置 withc 属性将作为子参考。在第一级我希望属性item_nested 作为子级,第二级我希望nested_item 作为子级,但是是否可以为 item-children 设置多个值?

【问题讨论】:

    标签: javascript vue.js treeview vuetify.js


    【解决方案1】:

    VTreeView 使用单个 string 作为孩子的键,所以 - 在不扩展/覆盖原始组件的情况下 - 我看不到为孩子提供替代键的方法。

    但是,您始终可以“重新键入”要在 ​​VTreeview 中显示的对象(此 sn-p 仅适用于这种特定情况,但可以通用):

    new Vue({
      el: '#app',
      vuetify: new Vuetify(),
      computed: {
        // "re-keying" items:
        modifiedTreeviewItems() {
          const updateItemKeys = (items) => {
            if (!items.length) return []
    
            const mapped = items.map((item) => {
              const {
                item_nested = [], nested_item = [], ...rest
              } = item
              const children = item_nested.length ? item_nested : nested_item.length ? nested_item : []
              return {
                ...rest,
                children: updateItemKeys(children),
              }
            })
            return mapped
          }
          return updateItemKeys(this.treeviewItems)
        },
      },
      data() {
        return {
          treeviewItems: [{
            id: 1,
            name: 'value1',
            item_nested: [{
                id: 2,
                name: 'value2',
              },
              {
                id: 3,
                name: 'value3',
                nested_item: [{
                  id: 4,
                  name: 'value4'
                }]
              }
            ]
          }]
        }
      },
    })
    <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
    <div id="app">
      <v-app>
        <v-main>
          <v-container>
            <v-treeview :items="modifiedTreeviewItems" />
          </v-container>
        </v-main>
      </v-app>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-06
      • 2017-02-12
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多