阅读本文约需要10分钟,您可以先关注我们,避免下次无法找到。
本篇文章成哥继续带大家来学习前端VUE教程,今天主要讲解VUE的条件渲染等知识点。下面我们就一起来学习该块内容吧!
01 v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值(JS的truthy值是除了false,0,"",null,undefined及NaN等值以外的值为truthy值)的时候被渲染。下面我们来看看v-if的使用示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!-- v-if绑定示列 -->
<div v-if="displayPage">条件渲染示例</div>
<div v-if="noDisplay">我被隐藏了</div>
<!-- 通过style样式隐藏标签 -->
<div style="display: none">我被隐藏啦啦啦</div>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
displayPage: true,
noDisplay: false
},
})
</script>
</body>
</html>
因为v-if是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个<template>元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。具体示例如下
<!-- 通过v-if控制一组标签进行渲染 -->
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
02 v-else
v-else用来配合v-if形成其的”else块”,v-else元素必须紧跟在带v-if或者v-else-if的元素的后面,否则它将不会被识别,具体示例如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!-- v-if绑定示列,如果v-if值为真则v-else的内容不显示 -->
<div v-if="displayPage">我是v-if内容块</div>
<div v-else>我是v-else内容块</div>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
displayPage: true,
},
})
</script>
</body>
</html>
03 v-else-if
v-else-if,顾名思义,充当 v-if 的“else-if 块”,可以连续使用。类似于 v-else,v-else-if 也必须紧跟在带 v-if 或者 v-else-if 的元素之后。具体使用示例如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!-- v-else-if绑定示列,根据condition的内容判断显示那块内容 -->
<div v-if="condition == 'A'">我是v-if内容块</div>
<div v-else-if="condition == 'B'">我是v-else-if内容块</div>
<div v-else>我是v-else内容块</div>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
condition: 'A',
},
})
</script>
</body>
</html>
04 v-show
另一个用于根据条件展示元素的选项是v-show指令。不同的是带有v-show的元素始终会被渲染并保留在DOM中(跟我们上面示列通过style属性隐藏标签的特性一致,没在页面上显示的标签会被渲染在DOM中)。v-show只是简单地切换元素的CSS property display,需要注意的是v-show不支持<template>元素,也不支持 v-else。v-show的具体使用示例如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!-- v-show示例,其绑定的为真时进行页面渲染,否则隐藏(但会渲染在DOM中) -->
<div v-show="displayPage">我是v-show展示内容</div>
<div v-show="noDisplay">我是v-show隐藏内容</div>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
displayPage: true,
noDisplay: false
},
})
</script>
</body>
</html>
05 v-show与v-if对比
v-show与v-if主要有以下区别:
(1)v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
(2)v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
(3)相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
06 KEY管理复用元素
Vue会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做除了使 Vue变得非常快之外,还有其它一些好处。例如,如果你允许用户在不同的登录方式之间切换,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="请输入用户名">
</template>
<template v-else>
<label>Email</label>
<input placeholder="请输入邮件地址">
</template>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
loginType: "username",
},
})
</script>
</body>
</html>
上面的代码中切换loginType将不会清除用户已经输入的内容。因为两个模板使用了相同的元素,<input> 不会被替换掉——仅仅是替换了它的 placeholder。这样也不总是符合实际需求,所以 Vue 为你提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需要添加一个具有唯一值的key属性即可,具体示例如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>VUE基础教程</title>
<!-- 引用vue.js文件 -->
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!-- 通过key解决元素复用问题 -->
<template v-if="loginType === 'username'">
<label>Username</label>
<!-- 设置key属性username-input -->
<input placeholder="请输入用户名" key="username-input">
</template>
<template v-else>
<label>Email</label>
<!-- 设置key属性email-input -->
<input placeholder="请输入邮件地址" key="email-input">
</template>
</div>
<script>
var vm = new Vue({
el: '#app', // dom的挂载点,这边将dom挂载到id为app的标签上
data: { // 数据对象
loginType: "username",
},
})
</script>
</body>
</html>
07 总结
至此我们《VUE基础教程四》就讲完了,下篇内容主要讲解VUE的循环渲染相关知识,敬请期待。最后如果喜欢本篇文章不要忘了点赞、关注与转发哦!
-END-
@IT管理局专注计算机领域技术、大学生活、学习方法、求职招聘、职业规划、职场感悟等类型的原创内容。期待与你相遇,和你一同成长。
文章推荐: