<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="js/Vue.js"></script>
<div id="demo">
<h1>v-for 和 v-if的优先级</h1>
<!-- <p v-for="child in children" v-if="isFolder">{{child.title}}</p>-->
<template v-if="isFolder" >
<p v-for="child in children">{{child.title}}</p>
</template>
</div>
<script type="text/javascript">
const app=new Vue({
el:'#demo',
data(){
return{
children:[
{title:'foo'},
{title:'bar'}
]
}
},
computed:{
isFolder(){
return this.children&&this.children.length>0;
}
}
})
console.log(app.$options.render);
</script>
</body>
</html>
当v-for与v-if在同一个标签上时,使用app.$options.render打印出渲染的结果。
显示_l(_l为列表执行的函数)的执行在isFolder判断的前边。所以v-for的优先级是大于v-if的,显然这样会浪费了性能
如果要避免这样的情况,可以使用以下方式,在外层包裹一个<template></template>标签用于v-if的判断,这样条件判断会先执行,而v-for的执行函数_l 则会在判断之后执行。