gpt4 book ai didi

css - V-if inside v-for - 在两列中显示元素列表

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:58 24 4
gpt4 key购买 nike

我很抱歉发布这个,- 因为我可以看到许多与此类似的问题已经被问过好几次了。以下是差点帮助我的人 - 以及他们没有帮助我的原因:

  • This一个是因为计算不应该在渲染中完成,而是在方法/计算部分进行。这对我没有帮助。
  • This一种是使用两个不同的模板,将 v-if 写在模板标签上。这对我来说似乎很愚蠢,因为这两个模板 98% 相同。
  • This Medium-article 解决了一个非常非常接近我的问题。但是,-在他的情况下,这是对用户的过滤(通过计算属性解决),而不是在特定迭代中插入代码片段的 if 子句(这是我想我正在寻找的)。

问题

我有一个从 API 中提取的元素列表,因此数量会发生变化。我希望它们显示在两列中:

-----------------
| Item1 Item5 |
| Item2 Item6 |
| Item3 Item7 |
| Item4 |
-----------------

我正在使用 v-for 循环遍历它们。

我的尝试

  1. 使用纯 CSS 和 display: flex

但这只能做到这一点:

-----------------
| Item1 Item2 |
| Item3 Item4 |
| Item5 Item6 |
| Item7 |
-----------------
  1. 将 CSS 与 column-count: 2; 结合使用

但是,关于 display: block; 的列中间元素中断了; overflow: hidden; 和许多其他尝试。应该说,这些元素的高度是可以变化的。

  1. 所以我放弃了使用 CSS 修复它。

如果它是 php,那么我会简单地做这样的事情:

<?php
if( $index == count( $items)/2 ):
echo '</div>';
echo '</div>';
echo '<div class="col-md-6">';
echo '<div class="item-container">';
endif;
?>

...但事实并非如此。我正在寻找 vue-alternative。我试过 this :

{{#if key === Number( items.length / 2 ) }}
</div>
</div>
<div class="col-md-6">
<div class="item-container">
{{/if}

但它不起作用。据我所知,这不是这样做的“vue 方式”。但我不知道是什么。 :-/

有这样的东西吗?

我当前代码的简化

<div class="col-md-12">
<div class="items-container">
<div class="item-container" v-for="item, key in items['data']">
<!-- A BUNCH OF ITEM-INFO -->
</div>
</div>
</div>

最佳答案

我要做的是创建一个计算属性,将元素数组划分(或分块)为适当数量的列。

这是一个使用 flexbox 布局和一个额外的 column 元素的示例。

new Vue({
el: 'main',
data: {
items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7'],
cols: 2
},
computed: {
columns () {
let columns = []
let mid = Math.ceil(this.items.length / this.cols)
for (let col = 0; col < this.cols; col++) {
columns.push(this.items.slice(col * mid, col * mid + mid))
}
return columns
}
}
})
.container {
display: flex;
border: 1px solid;
}
.col {
margin: 10px;
border: 1px solid;
flex-grow: 1;
display: flex;
flex-direction: column;
}
.item-container {
border: 1px solid;
padding: 5px;
margin: 5px;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
<main>
<p><label>Columns:<label> <input type="number" v-model="cols"></p>
<div class="container">
<div class="col" v-for="column in columns">
<div class="item-container" v-for="item in column">{{item}}</div>
</div>
</div>
</main>

如果您想要一种不那么冗长的方式来分块元素数组,请参阅 Split array into chunks

关于css - V-if inside v-for - 在两列中显示元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53075877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com