v-if:

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

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

在 Vue.js ,我们使用 v-if 指令实现同样的功能:

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

因为 v-if 是一个指令,需要将它添加到一个元素上。但是如果我们想切换多个元素呢?此时我们可以把一个 元素当做包装元素,并在上面使用 v-if。最终的渲染结果不会包含 template元素  

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

v-else:你可以使用 v-else 指令来表示 v-if 的“else 块”,但是必须紧跟在v-if或者v-else-if后面搭配一起使用 

<div v-if="i<7">smile</div>
<div v-else>cry</div>
data:{
i:5
}

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>

  

用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>

在上面的代码中切换loginType将不会清除用户已经清除的内容,因为两个模板使用了相同的元素,<input>不会被替换掉--仅仅是替换了他的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属性

v-show:也是根据条件展示元素,用法大致一样

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

不同的是带有v-show的元素始终会被渲染并保留在DOM中,也就是简单的切换元素CSS的display属性(v-show不支持v-else语法)

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

v-if也是惰性的:如果在初始渲染是条件为假,就什么也不做——直到条件第一次变为真时,才会开始渲染条件块

相比之下,v-show就简单的多——不管初始条件是什么,元素总是会被渲染,并且只是简单的基于CSS进行切换

一般来说,v-if有更高的切换开销,v-show有更高的初始化渲染开销,所以,需要频繁的切换使用v-show,如果项目运行时条件切换少,就用v-if

v-if和v-for一起使用,v-for的优先级要高于v-if

  

最新文章

  1. CentOS6.5安装Eclipse
  2. 作业七:团队项目——Alpha版本冲刺阶段-10
  3. 爱上MVC系列~过滤器实现对响应流的处理
  4. 手工加载DLL
  5. 移动网站中,用canvas,svg比用图片好?
  6. FAQ_1_陌生的VERSION.SDK_INT
  7. eclipse插件本地扩展安装
  8. 【Struts2学习笔记-3】常量配置
  9. Hadoop 中疑问解析
  10. C#限制转换后的double小数点留1位
  11. 获取浏览器版本Asp.Net
  12. 开源OCR光学字符识别
  13. 使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹
  14. datagridview数据绑定操作数据库实现增删改查
  15. 1c19b35b005744d55261682b361804fa 这个是MD5
  16. static 关键字 静态成员变量及静态成员函数
  17. python基础-变量运算符(3)
  18. 什么是面向切面编程AOP--知识点汇总
  19. MATLAB——径向基网络拟合曲线和分类
  20. 题目1008:最短路径问题(最短路径问题dijkstra算法)

热门文章

  1. Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.2 Applications of Propositional Logic
  2. 20191128 Spring Boot官方文档学习(9.4-9.8)
  3. Redis的消息订阅及发布及事务机制
  4. Java - Java Mail邮件开发(3)spring +Java Mail + Velocity
  5. net 架构师-数据库-sql server-003-T-SQL 基本语句
  6. 【LGR-065】洛谷11月月赛 III Div.2
  7. 动态规划(股票交易)---只能进行 k 次的股票交易
  8. git将某个分支的代码完全覆盖另一个分支
  9. 深度学习之group convolution,计算量及参数量
  10. R语言multiplot函数绘制多张图像