javascript - 在 Vue.JS 中循环以迭代一些项目并将它们包装在一个元素中

标签 javascript vue.js v-for

我是 Vue 的新手,我想创建一个循环 (v-for) 来创建类似这个 block 的东西

<div class="The-row">
 <span> {{ * }} </span>
 <span> {{ * }} </span>
</div>

在这个 block 中,每 2 个 span 都用一个带有“The-row”类的标签包装,每个 SPAN 标签都有一个替代项,这意味着:

<div class="The-row">
 <span> {{ item[0] }} </span>
 <span> {{ item[1] }} </span>
</div>
----------------------------------
<div class="The-row">
 <span> {{ item[2] }} </span>
 <span> {{ item[3] }} </span>
</div>

我在为创建循环做什么,我知道这种方式可以在每两次循环中显示一个元素

<div v-if=" index % 2 == 0 " >

看到这支笔 -> https://codepen.io/hamidrezanikoonia/pen/RQrvKJ

在这支笔中,我有两个重要的问题 1. 第一项dosent show 2.元素不能均匀

并且,请以正确的方式检查我,或者我可以使用其他方式

谢谢

最佳答案

我也更愿意改变数据的结构,而不是构建一个复杂的模板。但它会像这样工作:

<div class="option-row" v-if="($index + 1) % 2 == 1 ">

  <input class="option-input" id="option-1" type="radio" name="options" />
  <label class="option" for="option-1">
    <span class="option__label">
      <sub>{{item.name}}</sub>
    </span>
  </label>

  <input v-if="items[$index + 1]" class="option-input" id="option-1" type="radio" name="options" />
  <label v-if="items[$index + 1]" class="option" for="option-1">
    <span class="option__label">
      <sub>{{items[($index + 1)].name}}</sub>
    </span>
  </label>

</div>

这与 Richard Matsen 已经提到的解决方案相同。只有一点点增强:如果奇数元素不存在,则避免错误。

您可以为此使用计算属性:

computed: {
    groupedItems() {
        let grouped = [];
        index = -1;
        for (let i = 0; i < this.items.length; i++) {
            if (i % 2 == 0) { 
                index++;
                grouped[index] = [];
            }
            grouped[index].push(this.items[i]);
        }
        return grouped;
    }
}

你的模板会变得更干净:

<template v-for="items in groupedItems">
    <div class="option-row">
        <div v-for="item in items">
            <input class="option-input" id="option-1" type="radio" name="options" />
            <label class="option" for="option-1">
                <span class="option__label">
                    <sub>{{item.name}}</sub>
                </span>
            </label>
        </div>  
    </div>
</template>

关于javascript - 在 Vue.JS 中循环以迭代一些项目并将它们包装在一个元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48595750/

相关文章:

javascript - 旋转自定义形状会将其移动到 Angular 落

vue.js - Vue 3 - 组合 API - 如何获取 Prop 原始值

vue.js - Vue - 检查你是否在 v-for 循环的最后一个 Prop 上

vue.js - 使用 v-for 循环绑定(bind)不同颜色的背景

javascript - Chrome 扩展 : open new tab from a form in popup

javascript - 添加工厂时出现错误 : [$injector:unpr]

javascript - iframe 中的谷歌地图不以标签/标记为中心

vue.js - vue cli3 启用 CORS

javascript - VueJS 点击事件不起作用

vue.js - 更改特定索引而不在 Vuejs 中重新渲染整个数组