В доке пишут:
When they exist on the same node, v-for has a higher priority than v-if. That means the v-if will be run on each iteration of the loop separately.
То есть выполняется цикл, и на каждом шаге - проверка. Чтобы об этом не думать, можно тупо не использовать эти директивы вместе, а писать явно. Для этого есть встроенный "прозрачный" тег
template
:
<template v-if="shouldShowAllTags()">
<a v-for="tag in tags">{{tag}}</a>
</template>
...
<template v-for="tag in tags">
<a v-if="shouldShowThisTag(tag)">{{tag}}</a>
</template>
Теперь:
1) мы можем добавить
v-else
, если понадобится
2) человек, не читавший доку по ссылке выше, поймет как оно работает "на глаз", без экспериментов :)
UPD: Перечитал комменты в соседнем ответе, вам оказывается надо другое =) Но все равно оставлю, в назидание будущим поколениям ))