template:
- 一个包装元素标签,可以给很多标签增加同一种属性用,但是它不会真正的创建在页面上,也不会破坏dom结构,所以很好用;
案例演示:
需求:想让三个标签同时创建,或者同时删除;
改进前的方法:
<body>
<div id="box">
<div v-if="isCreated">11111</div>
<div v-if="isCreated">22222</div>
<div v-if="isCreated">33333</div>
</div>
<script>
new Vue({
el:"#box",
data:{
isCreated:true
}
})
</script>
</body>
- 给三个div标签都加上“v-if="isCreated",当isCreated=true时,三个标签都创建出来,当isCreated=false时,三个标签都删除;
- 但是按照上面的做法,v-if要写三遍,会很冗余,所以就可以用template来解决:
- 将template标签套在三个div盒子外面,给这个template标签加上v-if属性,这样就可以控制三个标签的创建和删除:
- template方法:
<body>
<div id="box">
<template v-if="isCreated">
<div>11111</div>
<div>22222</div>
<div>33333</div>
</template>
</div>
<script>
new Vue({
el:"#box",
data:{
isCreated:true
}
})
</script>
</body>
结果:
- 结果发现虽然我们用了template标签,但是这个标签并没有出现的dom结构上,所以说它是不会改变dom结构的一种很好的办法;
当然也有可能有人会有疑问,那直接在外面加个div盒子不就行了,为什么要加template盒子:
原因是加上div盒子会改变dom结构,三个盒子就不是“#box”的亲儿子了,就会有可能出问题,而外面这个div盒子也仅仅是为了里面三个div盒子加上v-if而已,没有什么实际的含义,那为什么不用template标签呢,也不会改变dom结构,有跟没有似的。