Vue | 07 条件渲染

  1. v-if的用法详解
  2. v-show的用法
  3. v-ifv-show的用法比较
  4. v-ifv-for联合使用的建议

v-if

在字符串模板里,例如 Handlebars,我们像这样写一个条件模块:

<!-- Handlebars template -->
{{#if ok}}
<h1>Yes</h1>
{{/if}}

在Vue我们使用v-if指令做相同的实现:

<h1 v-if="ok">Yes</h1>

使用v-else去添加else语句块

<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>
在template上使用v-if

v-if可以实现给一个元素,但如果你想作用于多个元素,我们可以在元素上使用v-if做一个不可见的封装。最终渲染的结果不包含元素.

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

你也能够使用v-else指令去为v-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-ifv-else-if元素。否则它将不被识别。

v-else-if

New in 2.1.0+

v-else-if服务于v-if的否则如果语句块。可以连续写多个。

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

类似于v-else,一个v-elese-if元素必须紧跟在v-ifv-else-if元素后面。

使用key控制复用元素

Vue为了尽可能高速的渲染元素,常常复用元素来代替从头渲染。这使得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>

填写输入框:
toggle-login-type-username
点击Toggle login type按钮切换输入框
toggle-login-type-email
切换loginType的时候已经录入的信息不会被擦除,因为两个模板使用相同的元素,没有被替换,仅仅替换了placeholder.

如果我们不复用他们,那么需要增加一个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>

填写输入框:
clear-username
点击Toggle login type切换按钮:
clear-email
输入框每一次都会被重新开始渲染,

v-show

v-show也是一个条件显示的指令。用例与v-if大致相同:

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

不同之处是v-show总是会显示在DOM中;v-show仅能触发CSS元素的display属性。

注意:v-show元素不支持元素,也对v-else不起作用。

v-if vs v-show

v-if它会确定事件监听在条件为真的时候渲染,子组件在被添加的语法块内被相应的销毁和创建。

v-if也是懒加载的,如果在初始化渲染期间条件是false,它不会做任何事情-直到条件变为真的时候才会被重新渲染。

相比之下,v-show是更简单的-不管初始条件如何元素总是被渲染,基于CSS触发。

通常来说,v-if有更高的触发成本,v-show有更高的初始化渲染成本。如果你需要经常切换,那么使用v-show,如果条件在运行时不可能改变则使用v-if.

v-ifv-for

不推荐v-ifv-for一起使用。可以进一步看 style guide

当和v-if一起使用的时候,v-for有更高的优先级。详情看 list rendering guide

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值