How should we handle a v-for
combined with a v-if
in this exemple:
Here my data.json
:
[
{
image: 'foo.jpg'
},
{
image: 'foobar.jpg',
video: 'bar.mp4'
},
{
image: 'barfoo.jpg'
}
]
In my vue template, I'd like to render something like this:
<div v-for="(item, key, index) in data" : key="index">
<img :src="item.image">
<video v-if="!!item.video" :src="item.video"></video>
</div >
But as the documentation say, we should avoid v-if
with v-for
and instead use a computed value. But there I need to render the image even if the json entry doesn't have a video.
That's not a big deal, I've find a solution but I'd like to know the best way to handle this.
I think that you are misunderstanding the documentation. In this instance, it makes sense to use both
v-for
andv-if
because you are always going to render at least the<img>
and you might render the<video>
. The documentation is trying to show that you should pre-filter a list of items if thev-if
andv-for
are on the exact same element.The example the docs are showing are trying to get you to cut a list that would show only only 2 of the 3 total elements down to just 2 elements and letting the computed prop tell you when there are more. Otherwise you have to iterate through the entire list every time you need to re-render.
Consider this difference: