Concept Flow - v-for with v-if precedence
Start v-for loop
For each item
Evaluate v-if condition
Render item
Next item or End loop
The v-for loop runs first, then for each item, the v-if condition is checked. Items passing v-if render; others skip.
<template>
<ul>
<li v-for="item in items" v-if="item.show" :key="item.id">{{ item.name }}</li>
</ul>
</template>| Step | Current item | v-if condition (item.show) | Render? | Output |
|---|---|---|---|---|
| 1 | {id:1, name:'Apple', show:true} | true | Yes | <li>Apple</li> |
| 2 | {id:2, name:'Banana', show:false} | false | No | |
| 3 | {id:3, name:'Cherry', show:true} | true | Yes | <li>Cherry</li> |
| 4 | End of items | - | - | Loop ends |
| Variable | Start | After 1 | After 2 | After 3 | Final |
|---|---|---|---|---|---|
| item | undefined | {id:1, name:'Apple', show:true} | {id:2, name:'Banana', show:false} | {id:3, name:'Cherry', show:true} | undefined |
| renderedItems | [] | [Apple] | [Apple] | [Apple, Cherry] | [Apple, Cherry] |
v-for loops over all items first. v-if runs on each item after v-for picks it. Only items passing v-if render. Use v-if inside v-for to conditionally render. Remember: v-for has higher precedence than v-if.