Vue条件渲染

Vue 条件渲染

  • v-if v-else-if v-else
<div v-if="current === 'Name'">Name</div>
<div v-else-if="current === 'Address'">Address</div>
<div v-else="current === 'Email'">Email</div>

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

  • 使用 template 切换多个元素

如果需要一次切换多个元素,可以使用 template 元素当作一个不可见的包裹元素,在其上面使用 v-if 实现效果。渲染结果不会显示 tempalte 元素。

<template v-if="show">
    <div>A</div>
    <div>B</div>
    <div>C</div>
</template>
  • v-if 中使用 key 复用元素

Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。

<!-- 复用input -->
<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>
<!-- 当元素中key值不一样的时候,Vue不进行复用(这两个元素是完全独立的,不要复用它们) -->
<template v-if="loginType === 'username'">
    <label>Username</label>
    <input placeholder="Enter your username" key="username">
</template>
<template v-else>
    <label>Email</label>
    <input placeholder="Enter your email address" key="email">
</template>
  • v-show

v-show 渲染的元素一直显示在 DOM 中,只是简单的切换 display 状态。

<div v-show="current === 'Name'">Name</div>
<div v-show="current === 'Address'">Address</div>
<div v-show="current === 'Email'">Email</div>

v-show@2x.png

注意,v-show 不支持<template> 元素,也不支持 v-else。

v-if VS v-show

  • v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
  • v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
  • 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
  • v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
指令 弊端 备注
v-if 更高的切换开销 适用于切换不高的场景
v-show 更高的初始化开销 适用于切换频繁的场景
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 条件渲染 v-if 在<template>元素上使用v-if条件渲染分组 最终的渲染结果将不包含<template...
    oWSQo阅读 870评论 1 0
  • Vue条件渲染 v-if v-if可使用v-else指令来表示它的else块,v-else元素必须紧跟带v-if或...
    JunChow520阅读 215评论 0 0
  • v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: 在 Vue.js ,我们使用 v...
    李诺哦阅读 502评论 0 0
  • 一. v-if 在字符串模板中,如Handlebars ,我们得像这样写一个条件块 在vue.js使用v-if实现...
    竹溪穆褕阅读 288评论 0 0
  • 1 聊到医院,绝大多数人的感受都不怎么美好。 哪怕是作为医务工作者家属的我,也没什么好印象。 我问H先生,提到医院...
    小荻老师阅读 611评论 0 1

友情链接更多精彩内容