VUE中v-for和v-if不能同时使用的问题
在开发时候碰到了一个问题:v-if和v-for不能同时使用:
<h-tab-panev-for="(item, index) in tabItems"
:key="index"
:label="item.title"
:id="item.id"
:name="item.id"
v-if="item.show"
>
<comment :is="item.componentName"></comment>
</h-tab-pane>
查找资料,官方的例子如下:(风格指南:https://cn.vuejs.org/v2/style-guide/)
<ul><li
v-for="user in users"
v-if="user.isActive"
:key="user.id"
>
{{ user.name }}
</li>
</ul>
原因:当 Vue 处理指令时,v-for
比 v-if
具有更高的优先级,所以上述模板会进行如下运算:
this.users.map(function (user) {if (user.isActive) {
return user.name
}
})
因此哪怕我们只渲染出一小部分用户的元素,也得在每次重渲染的时候遍历整个列表,不论活跃用户是否发生了变化。
通过将其更换为在如下的一个计算属性上遍历:
computed: {activeUsers: function () {
return this.users.filter(function (user) {
return user.isActive
})
}
}
<ul><li
v-for="user in activeUsers"
:key="user.id"
>
{{ user.name }}
</li>
</ul>
在找资料过程中,发现了另一种方法,实测可用:https://forum.vuejs.org/t/vue3-x-v-for-v-if-v-if-v-else/71414/3
<template v-for="(item, index) in tabItems"><h-tab-pane
v-if="item.show"
:key="index"
:label="item.title"
:id="item.id"
:name="item.id"
>
<comment :is="item.componentName"></comment>
</h-tab-pane>
</template>
以上是 VUE中v-for和v-if不能同时使用的问题 的全部内容, 来源链接: utcz.com/z/376271.html