javascript - 如何在某些特定条件下迭代 HTML 元素?
问题描述
问题陈述: v-for
循环在 HTML 模板中正确地迭代和绑定数据,但不能根据某些条件部分地迭代它。请在 JSFiddle 链接下方找到演示。
要求:在上面的演示链接中,对于“第二部分”,我只想显示输入文本框一次,它将垂直对齐中心(在 beta 前面),而不是多次重复。其他值将重复(即 alpha、beta、gama)。
任何帮助都将是非常可观的。
var arr = [{
sectionName: 'First Section',
data: ['alpha', 'beta']
}, {
sectionName: 'Second Section',
data: ['alpha', 'beta', 'gama']
}];
var myitem = new Vue({
el: '#my-items',
data: {
items: arr
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.6/vue.js"></script>
<div id="my-items">
<div v-for="item in items">
{{ item.sectionName }} <hr>
<div v-for="sectionData in item.data" style="margin: 5px">
<span style="width:50px;text-align:left;display:inline-block;">{{ sectionData }}</span> <input type="textbox"/>
</div>
</div>
</div>
解决方案
您可以将索引传递给您的 v-for,然后在循环内的条件中使用它。我已经修改了您的示例以显示原理。文本框出现在第一个循环的每个部分,或者如果 sectionData === beta。您可以在 v-if 中看到这种情况。
这可行,但一般来说,每次使用 v-for 时,都应该创建一个组件。否则,该结构很快就会变得难以理解。
var arr = [{
sectionName: 'First Section',
data: ['alpha', 'beta']
}, {
sectionName: 'Second Section',
data: ['alpha', 'beta', 'gama']
}];
var myitem = new Vue({
el: '#my-items',
data: {
items: arr
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.6/vue.js"></script>
<div id="my-items">
<div v-for="(item, index) in items">
{{ item.sectionName }} <hr>
<div v-for="sectionData in item.data" style="margin: 5px">
<span style="width:50px;text-align:left;display:inline-block;">{{ sectionData }}</span>
<input
v-if="index === 0 || sectionData === 'beta'"
type="textbox"
/>
</div>
</div>
</div>
推荐阅读
- unity3d - Unity Destroy() 不会删除脚本
- arrays - 如何将数组的每个元素与其他元素进行比较?
- java - 更新数据 Android MVVM
- c# - C# 表达式树编译问题
- c# - 如何在我的 xamarin.forms.maskedentry 控件中处理超出范围的索引
- html - 调整表格以响应
- python - PySpark - 上采样/重采样时间序列数据
- sql - 收到以下错误“函数中包含的选择语句无法将数据返回给客户端”
- python - 在 python 中将列表写入 csv/excel
- ruby-on-rails - Rails 将 3.2.* 升级到 4 不在 Rails 控制台中显示所有用户属性