v-if

  • 用于条件性地渲染一块内容

  • 只会在指令地表达式返回真值时才被渲染

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

v-else

  • 相当于v-if的“else区块”

<button @click="awesome = !awesome">Toggle</button>

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>

Tips:一个v-else元素必须跟在一个v-if或者v-else-if元素后面,否则它将不会被识别。

v-else-if

  • 相当于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>

Tips:一个v-else-if的元素必须跟在一个v-if或者v-else-if元素后面。

<template>上的v-if

因为 v-if 是一个指令,他必须依附于某个元素。但如果我们想要切换不止一个元素呢?在这种情况下我们可以在一个 <template> 元素上使用 v-if,这只是一个不可见的包装器元素,最后渲染的结果并不会包含这个 <template> 元素。

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

Tips:v-else和v-else-if也可以在<template>上使用

v-show

另一个可以用来按条件显示一个元素的指令,用法基本一样:

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

不同之处:

  • v-show会在DOM渲染中保留该元素

  • v-show仅切换了该元素上名为display的CSS属性

  • v-show不支持在<template>元素上使用,也不能和v-else搭配使用

v-if和v-show

  • v-if是真实地按条件渲染,确保了在切换时,条件区块内地事件监听器和子组件都会被销毁与重建

  • v-if是惰性地,如果在初次渲染时条件值为false,则不会做任何事,条件区块只有当条件首次变为true时才被渲染

  • v-show则元素无论初始条件如何,始终会被渲染,只有CSS的display属性会被切换

  • 总结:v-if有更高的切换开销,v-show有更高的初始渲染开销;如果需要频繁切换则使用v-show比较好,如果运行时绑定条件很少改变,则v-if更适合

v-if和v-for

当v-if和v-for同时存在于一个元素上的时候,v-if会首先被执行。

但不推荐同时使用v-if和v-for,因为二者之间的优先级不明显。

文章作者: Sleny
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咸鱼说
Vue Vue
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝