6.条件渲染

v-if 指令

  1. 用于条件性地渲染一块内容
  2. 只会在指令的表达式返回 truthy 值的时候被渲染
<h1 v-if="awesome">Vue is awesome!</h1>
<template v-else>
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

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

  1. 切换多个元素,可以把一个 <template> 元素当做不可见的包裹元素
  2. 最终的渲染结果将不包含 <template> 元素

v-else 指令

  1. 使用 v-else 指令来表示 v-if 的“else 块”
  2. v-else 元素必须紧跟在带 v-if 或者 v-else-if 后,否则不被识别

v-else-if 指令

  1. 充当 v-if 的“else-if 块”,可以连续使用
<div v-if=" count < 10 ">
  count less then 10 
</div>
<div v-else-if="count < 20 ">
  count less then 20 
</div>
<div v-else>
  count more then 20 
</div>

用 key 管理可复用的元素

  1. 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>
  • 两个模板使用了相同的元素,<input> 将不会替换,只替换placeholder

设置唯一性

  1. 添加一个具有唯一值的 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>
  • <label> 元素仍被复用

v-show 指令

  1. 带有 v-show 的元素始终会被渲染并保留在 DOM 中
  2. v-show 切换元素的 display属性
  3. v-show 不支持 <template> 元素,也不支持 v-else
<h1 v-show="ok">Hello!</h1>

v-if vs v-show

  • v-if
    • “真正”的条件渲染
    • 在切换过程中条件块内的事件监听器子组件适当地被销毁和重建
    • 惰性的——初始渲染时条件为假,不启用,直到第一次为真
    • 更高的切换开销,运行时条件很少改变,则使用 v-if
  • v-show
    • 不管初始条件,元素总是会被渲染,
    • 简单地基于 CSS 进行切换
    • 更高的初始渲染开销,频繁地切换,则使用 v-show

v-if 与 v-for 一起使用

不推荐同时使用 v-ifv-for

v-for 具有比 v-if 更高的优先级

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 条件渲染 v-if 在<template>元素上使用v-if条件渲染分组 最终的渲染结果将不包含<template...
    oWSQo阅读 787评论 1 0
  • 一、初探条件渲染 vue 的条件渲染,仍旧依赖于指令系统,下面逐个介绍: (1)v-if 当 c1 为真值的时候,...
    ebfc7d0362e4阅读 1,676评论 0 1
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 3,373评论 0 25
  • 1. Vue 实例 1.1 创建一个Vue实例 一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实...
    王童孟阅读 1,029评论 0 2
  • 你很累吗?累就对了!但是累死之前一请不要四处宣扬你的决心,二请停止抱怨你的苦难。因为但凡想干成点事的人,必然要先累...
    安达罗丝阅读 286评论 0 1