对于设计需要“表格”样式,每2 Item
我需要一行。正面效果很好。但是我的v模型基于Item
的索引(item_index),并且我的代码没有给我期望的索引:
new Vue({
el: '#demo',
data: {
items: [
'item 0',
'item 1',
'item 2',
'item 3',
'item 4',
'item 5',
'item 6',
'item 7',
'item 8',
'item 9',
'item 10'
]
}
})
.row {
padding: 10px;
}
span {
background: rgba(255,0,0,.3);
}
span:nth-child(odd) {
background: rgba(0,255,0,.3);
}
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="demo">
<div class="row" v-for="i in Math.ceil(items.length / 2)">
<span v-for="(item, item_index) in items.slice((i - 1) * 2, i * 2)">
{{ item }} • v-model => {{ item_index }}
</span>
</div>
</div>
如您所见,对于我的v模型,我得到0; 1; 0; 1; 0; 1等。
我想要0; 1; 2; 3; 4; 5等
如何检索真实索引?
答案 0 :(得分:1)
实际上,您获得的是切片数组的正确索引,而不是原始数组的索引。当您在slice
中的源数组上调用v-for
时,item_index
是为数组的2个元素计算的,这就是为什么只有0、1、0、1等的原因。
您必须基于两个v-for
循环中的索引来计算该索引。
在这种情况下就是(i-1)*2 + item_index
。
new Vue({
el: '#demo',
data: {
items: [
'item 1',
'item 2',
'item 3',
'item 4',
'item 5',
'item 6',
'item 7',
'item 8',
'item 9',
'item 10'
]
}
})
.row {
padding: 10px;
}
span {
background: rgba(255,0,0,.3);
}
span:nth-child(odd) {
background: rgba(0,255,0,.3);
}
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="demo">
<div class="row" v-for="i in Math.ceil(items.length / 2)">
<span v-for="(item, item_index) in items.slice((i - 1) * 2, i * 2)">
{{ item }} - v-model = {{ (i-1)*2 + item_index }}
</span>
</div>
</div>