v-if

v-if指令用于条件性的渲染一块内容,在表达式为true的时候渲染

<h1 v-if="awesome">Vue is awesome!</h1>

也可以用v-else加上一个else块

<h1 v-if="awesome">Vue is awesome~</h1>
<h1 v-else>Oh</h1>

#在< template>元素上使用v-if条件渲染分组

使用方式一样,在template标签加上v-if进行条件渲染

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

v-else

可以使用v-else指令来渲染if中的else块

<div v-if="Math.random() > 0.5">
  Now you see me
</div>
<div v-else>
  Now you don't
</div>

v-else指令必须跟在v-if或者v-else-if指令后面,否则不被识别

v-else-if

2.1.0版本新增,充当v-if中的else-if块

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

v-else-if必须跟在v-if或者v-else-if指令后面

使用key管理可复用元素

Vue尽可能的高效的渲染,通常会复用现有的元素而不是重头渲染

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address">
</template>

代码中中切换loginType的时候不会清除掉输入内容,而只是替换掉了placeholder

Vue提供了一种方式来使相的元素不进行复用,只需要添加一个具有唯一值的属性key即可

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address" key="email-input">
</template>

加上不同的key后每次切换都会重新渲染元素

==lable元素仍会被高效的复用,因为lable元素没有key属性==

v-show

v-show和v-if不同的是v-show渲染后的元素会在dom中存在,只是简单的切换了css的display属性

<h1 v-show="ok">Hello!</h1>

==v-show不支持v-else也不支持在template元素中使用==

v-if vs v-show

v-if是“真正”的条件渲染,会确保在切换的过程中条件块内的事件监听器和子组件适当的被销毁重建

v-if是具有 惰性 的:若在渲染初期时渲染条件为假,则什么也不做,直到条件为真的时候才会开始渲染

v-show的方式简单很多,不管条件是否成立都会渲染进dom中当条件不为true的时候更改css的display的属性为隐藏

一般来说v-if具有更高的切换开销,v-show具有更高的渲染开销,所有一般需要频繁切换用v-show较好,条件改变较少用v-if较好

v-if与v-for一起使用

不推荐在同一个元素中使用v-if和v-for,当v-if和v-for在一起使用的时候v-for有较高的优先级

最后修改:2019 年 05 月 09 日
如果觉得我的文章对你有用,请随意赞赏