【发布时间】:2019-04-04 04:16:21
【问题描述】:
很抱歉发布此消息,因为我可以看到许多与此类似的问题已被多次询问。以下是几乎可以帮助我的那些 - 以及为什么他们没有:
- This 一个是因为计算不应该在渲染中完成,而是在方法/计算部分。这对我没有帮助。
-
This 一个是使用两个不同的模板,在模板标签上写
v-if。在我的情况下这似乎很愚蠢,因为这两个模板将 98% 相同。 - This Medium-article 解决了一个非常接近我的问题非常。但是,-在他的情况下,这是对用户的过滤(通过计算属性解决),而不是在某个迭代中插入 sn-p 代码的 if 子句(我认为我正在寻找) .
问题
我有一个从 API 中提取的项目列表,因此数量会发生变化。我希望它们显示在两列中:
-----------------
| Item1 Item5 |
| Item2 Item6 |
| Item3 Item7 |
| Item4 |
-----------------
我正在使用 v-for 循环遍历它们。
我的尝试
- 使用纯 CSS 和
display: flex
但这只能做到这一点:
-----------------
| Item1 Item2 |
| Item3 Item4 |
| Item5 Item6 |
| Item7 |
-----------------
- 将 CSS 与
column-count: 2;结合使用
但这打破了列中间元素,display: block; overflow: hidden; 和许多其他尝试。应该说,这些元素的高度是可以变化的。
- 所以我放弃了使用 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 的替代品。我试过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><!-- /.item-container -->
</div><!-- /.items-container -->
</div><!-- /.col-md-12 -->
【问题讨论】:
-
为了避免重复关闭,请edit your question 引用其他帖子并解释它们如何/为什么不适合您?
-
我现在添加了最接近解决方案的那些,以及为什么我不能使用它们 (@Phil)。
-
干杯。我想您不希望为
items-container设置固定高度,对吗?所以您希望第二列从基于项目数的逻辑中间点开始? -
认为您可以使用条件类 `v-for="item, key, index in items['data']" v-bind:class="{ clearfix: !(索引 % 2) }"1
-
@Phil :是的,-我强烈希望不要设置高度,因为内容将从 API 中提取,所以我无法控制一堆东西被拉。所以网格应该尽可能灵活。