Vue中v-if和v-for的⼀起使⽤时的⼏种处理⽅式
槐园梦忆在处于同⼀节点的时候,v-for 优先级⽐ v-if ⾼。这意味着 v-if 将分别重复运⾏于每个 v-for 循环中。即——先运⾏v-for 的循环,然后在每⼀个v-for 的循环中,再进⾏ v-if 的条件对⽐。所以,不推荐v-if和v-for同时使⽤。
template
<template v-for="(item, index) in list" :key="index">
<div v-if="item.isShow">{{item.title}}</div>
</template>
计算属性(推荐使⽤)
<template>
<div>
<div v-for="(ur,index) in activeUrs" :key="ur.index" >
钱学森的事迹{{ ur.name }}
</div>
</div>
</template>
普罗旺斯是哪个国家的<script>
export default {
name:'A',
data () {
return {
urs: [{name: 'aaa',isShow: true},
关于春的诗
{name: 'bbb',isShow: fal}]
};
},
computed: {//通过计算属性过滤掉列表中不需要显⽰的项⽬
activeUrs: function () {
return this.urs.filter(function (ur) {
return ur.isShow;//返回isShow=true的项,添加到activeUrs数组
学做早点})
}
}
};
</script>
18年属相
单独二孩政策
在 vue 2.x 中,在⼀个元素上同时使⽤ v-if 和 v-for 时,v-for 会优先作⽤。
乒乓球英语怎么说
在 vue 3.x 中,v-if 总是优先于 v-for ⽣效。
1、选择性地渲染列表,例如根据某个特定属性来决定是否渲染,使⽤计算属性computed:
<div v-for="item in inHouList" v-if="item.is_expired === 1">{{item.bar_code}}</div>
computed: {
activeinHouList: function() {
return this.inHouList.filter((item) => {
return item.is_expired === 1
})
}
}
<div v-for="item in activeinHouList">{{item.bar_code}}</div>
2、避免渲染本该隐藏的列表项,将v-if放到循环列表元素的⽗元素中或使⽤template将v-for渲染的元素包起来,再在template上使⽤v-if。<div v-for="item in inHouList" v-if="isExpired === 1 ">{{item.bar_code}}</div>
<template v-if="isExpired === 1">
<div v-for="item in inHouList"></div>
</template>
总结:
vue2.x 中v-for优先级⾼于v-if,vue3.x 相反
尽量避免在同⼀个元素上⾯同时使⽤v-if和v-for,建议使⽤计算属性替代