在这个例子中我们应该如何处理 av-for与 a的组合v-if:
这是我的data.json:
[
{
image: 'foo.jpg'
},
{
image: 'foobar.jpg',
video: 'bar.mp4'
},
{
image: 'barfoo.jpg'
}
]
Run Code Online (Sandbox Code Playgroud)
在我的 vue 模板中,我想呈现如下内容:
<div v-for="(item, key, index) in data" : key="index">
<img :src="item.image">
<video v-if="!!item.video" :src="item.video"></video>
</div >
Run Code Online (Sandbox Code Playgroud)
但作为文档说,我们应该避免v-if使用v-for,而使用一个计算值。但是即使 json 条目没有视频,我也需要渲染图像。
这没什么大不了的,我已经找到了解决方案,但我想知道处理这个问题的最佳方法。
我认为您误解了文档。在这种情况下,同时使用两者是有意义的v-for,v-if因为您总是至少要渲染 ,<img>而您可能会渲染<video>. 该文档试图表明如果v-if和v-for位于完全相同的元素上,您应该预先过滤项目列表。
文档显示的示例试图让您将仅显示 3 个总元素中的 2 个元素的列表剪切为 2 个元素,并让计算道具告诉您何时有更多元素。否则每次需要重新渲染时都必须遍历整个列表。
考虑这种差异:
// An array of 1000 items but only 1 has a video element
const data = [0...999];
data.push({
image: "some.jpg",
video: "some.mp4"
});
Run Code Online (Sandbox Code Playgroud)
<!--
We always render 1000 items but only some will have video
-->
<div
v-for="(item, key, index) in data"
:key="index">
<img :src="item.image">
<video v-if="!!item.video" :src="item.video"></video>
</div>
<!--
We have to visit 1000 elements but
only 1 will actually end up rendering
-->
<div
v-if="!!item.video"
v-for="(item, key, index) in data"
:key="index">
<img :src="item.image">
<video :src="item.video"></video>
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4116 次 |
| 最近记录: |