【问题标题】:Nested arrays of objects and v-for嵌套的对象数组和 v-for
【发布时间】:2016-05-30 22:16:00
【问题描述】:

嗯,这个问题让我很困惑……让嵌套的 for 循环数据显示有点麻烦:

<div v-if = "private.folders!=null" v-for="folder in private.folders">
{{folder.name}}
    <div v-for="check in folder.checks">
        {{check.name}}
    </div>
</div>

然后我尝试使用的数据如下所示:

folders [Array]
-object [this is a single 'folder']
--name
--checks [array] [each folder has this array]
---[object] [the actual 'check' object]
----[name]

外循环工作得很好,并返回我期望的数据。但是, check.name 不返回任何内容,并且控制台中没有错误。是否可以像这样进行嵌套的 for 循环?

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    我测试了你的模板,它的工作原理。

     new Vue({
      el: '#sample',
      data: {
        private: {
          folders : [{
              name : 'folder1',
              checks : [
                { name : 'check1.1' },
                { name : 'check1.2' }
              ]
            },
            {
              name : 'folder2',
              checks : [
                { name : 'check2.1' },
                { name : 'check2.2' }
              ]
            }
          ]
        }
      }
    })
    <script src="https://cdn.jsdelivr.net/vue/latest/vue.js"></script>
    <div id="sample">
      <div v-if = "private.folders!=null" v-for="folder in private.folders">
      {{folder.name}}
          <div v-for="check in folder.checks">
              {{check.name}}
          </div>
      </div>
    </div>

    【讨论】:

    • 它对我不起作用,虽然我使用的是 table 而不是 div
    • 如何在嵌套中使用索引(不重置)?
    • 避免在同一个元素中使用 v-for 和 v-if
    【解决方案2】:

    这就是你可以用 HTML 表格设置它的方式:

    new Vue({
      el: '#sample',
      data: {
        private: {
          folders : [{
              name : 'folder1',
              checks : [
                { name : 'check1.1' },
                { name : 'check1.2' }
              ]
            },
            {
              name : 'folder2',
              checks : [
                { name : 'check2.1' },
                { name : 'check2.2' }
              ]
            }
          ]
        }
      }
    })
    <script src="https://cdn.jsdelivr.net/vue/latest/vue.js"></script>
    <div id="sample">
    <table>
      <tr>
        <th>Folder</th>
        <th>Checks</th>
        <th>Checks</th>
      </tr>
      <tr v-if = "private.folders!=null" v-for="folder in private.folders">
      <td><b>{{folder.name}}</b></td>
          <td v-for="check in folder.checks">
             {{check.name}}
          </td>
      </tr>
    </table>
    </div>

    【讨论】:

    • 您不应该在声明 v-for 的同一行上进行条件渲染
    猜你喜欢
    • 2020-07-24
    • 2017-06-09
    • 2020-05-27
    • 2020-09-04
    • 2020-04-28
    • 2019-06-04
    • 2021-09-13
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多