Vue.js 条件渲染 v-if、v-show、v-else

简介:

v-if  

v-if 完全根据表达式的值在DOM中生成或移除一个元素。如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除;否则,对应元素的一个克隆将被重新插入DOM中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
< html  lang = "en" >
< head >
     < meta  charset = "UTF-8" >
     < title >Title</ title >
</ head >
< body >
< div  id = "example" >
     < p  v-if = "greeting" >Hello</ p >
</ div >
 
< script  src = "js/vue.js" ></ script >
< script >
     var vm2 = new Vue({
         el:'#example',
         data:{
             greeting:true  //或false
         }
     })
</ script >
</ body >
</ html >


greeting取值为true,效果截图:

wKiom1grGvGD9PiJAABKiGAyD9E187.png

greeting取值为false,效果截图:

wKioL1grGwbgxzn3AAA8eC-MyAA616.png

template v-if

因为v-if是一个指令,需要将它添加到一个元素上。但是如果想切换多个元素,则可以把<template>元素当作包装元素,并在其上使用v-if,最终的渲染结果不会包含它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
< html  lang = "en" >
< head >
     < meta  charset = "UTF-8" >
     < title >Title</ title >
</ head >
< body >
< div  id = "example" >
     < template  v-if = "ok" >
         < h1 >Title</ h1 >
         < p >Paragraph1</ p >
         < p >Paragraph2</ p >
     </ template >
</ div >
 
< script  src = "js/vue.js" ></ script >
< script >
     var vm3 = new Vue({
         el:'#example',
         data:{
             ok:true
         }
     })
</ script >
</ body >
</ html >

wKiom1grG_vy6MjlAABkH7dQoT4062.png



在切换v-if模块时,Vue.js有一个局部编译/卸载过程,因为v-if中的模板可能包括数据绑定或子组件。v-if是真实的条件渲染,因为它会确保条件块在切换时合适地销毁与重建条件块内的事件监听器和子组件。


v-if是惰性的--如果初始渲染时条件为假,则什么也不做,在条件第一次变为真时才开始局部编译(编译会被缓存起来)。


相比之下,v-show简单得多----元素始终被编译并保留,只是简单地基于CSS切换。


v-show

v-show 根据表达式的值来显示或隐藏HTML元素。当v-show赋值为false时,元素将被隐藏。查看DOM时,会发现元素上多了一个内联样式style="display:none"。

1
2
3
4
5
6
7
8
9
10
11
12
13
< div  id = "example" >
     < p  v-show = "greeting" >Hello</ p >
</ div >
 
< script  src = "js/vue.js" ></ script >
< script >
     var vm2 = new Vue({
         el:'#example',
         data:{
             greeting:false //true
         }
     })
</ script >


greeting取值为false,效果截图:

wKiom1grHmOTqYQQAABTJxYCx_0703.png

greeting取值为true,效果截图:

wKiom1grHgLhBi9lAABF4eHR4cQ601.png


注意:v-show不支持<template>语法



现在做一个小的demo,要求是如果文本框里面的内容为空是提示用户输入内容,有内容输入时,刚才的提示内容消失并出现一个提交的按钮

1
2
3
4
5
6
7
8
9
10
< div  id = "app" >
     < form >
         < div  class = "error"  v-show = "!msg" >The text area can not be empty</ div >
         < textarea  v-model = "msg" ></ textarea >< br />
         < button  v-show = "msg" >Send Message</ button >
     </ form >
     < pre >
         {{$data|json}}
     </ pre >
</ div >
1
2
3
4
5
6
new  Vue({
     el: '#app' ,
     data:{
         msg: ''
     }
})

wKioL1gA6u3RPR6IAAAFClfEqKU473.png wKiom1gA6v7ihRHIAAAKktRJ3oE219.png

在上面的例子中,声明一个空的字符串msg,当不存在msg的时候,提示内容的div里面v-show为true;存在msg的时候,button里面v-show为true


通常,我们用jquery实现的时候都是去判断输入框内容是否为空,这里一样可以用条件判断 v-if 的方式去实现,但是与v-show有区别

1
2
3
4
5
6
7
8
9
10
< div  id = "app" >
     < form >
         < div  class = "error"  v-if = "!msg" >The text area can not be empty</ div >
         < textarea  v-model = "msg" ></ textarea >< br />
         < button  v-show = "msg" >Send Message</ button >
     </ form >
     < pre >
         {{$data|json}}
     </ pre >
</ div >

wKioL1gA7KeAkKLhAAB95AzdjNA632.png

随着内容输入,class为error的div整个消失了,而使用v-show的时候,只是把display属性设置为none

wKioL1gA7RaSle-NAACJxXAa0RM650.png




一般来说,v-if有更高的切换消耗,而v-show有更高的初始渲染消耗。因此,如果需要频繁地切换,则使用v-show较好;如果在运行时条件不大可能改变,则使用v-if较好。


v-else   顾名思义,v-else就是Javascript中else的意思,它必须跟着v-if或v-show,充当else功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div id= "example" >
     <p v- if = "ok" >我是对的</p>
     <p v- else = "ok" >我是错的</p>
</div>
 
<script src= "js/vue.js" ></script>
<script>
     var  vm3 =  new  Vue({
         el: '#example' ,
         data:{
             ok: false
         }
     })
</script>

wKiom1grKYjyif06AAA12h1eeek272.png


将v-show用在组件上时,因为指令的优先级v-else会出现问题,所以不要这样做

<custom-component v-show="condition"></custom-component>


我们可以用另一个v-show替换v-else

<custom-component v-show="condition"></custom-component>

<p v-show="condition">这可能也是一个组件</p>


本文转自   frwupeng517   51CTO博客,原文链接:http://blog.51cto.com/dapengtalk/1873289
相关文章
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
432 57
|
JavaScript
VUE学习二:事件监听(v-on)、条件判断(v-if/v-else-if/v-else)、循环遍历(v-for)
这篇文章是关于Vue.js的学习指南,涵盖了事件监听、条件判断、循环遍历、数组方法响应性、案例分析以及高阶函数的使用。
212 2
VUE学习二:事件监听(v-on)、条件判断(v-if/v-else-if/v-else)、循环遍历(v-for)
|
8月前
|
数据采集 Web App开发 JavaScript
Python爬虫如何获取JavaScript动态渲染后的网页内容?
Python爬虫如何获取JavaScript动态渲染后的网页内容?
|
10月前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
295 56
|
10月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
330 17
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
980 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
监控 JavaScript 前端开发
Vue 异步渲染
【10月更文挑战第23天】Vue 异步渲染是提高应用性能和用户体验的重要手段。通过理解异步渲染的原理和优化策略,我们可以更好地利用 Vue 的优势,开发出高效、流畅的前端应用。同时,在实际开发中,要注意数据一致性、性能监控和调试等问题,确保应用的稳定性和可靠性。
|
Web App开发 前端开发 JavaScript
JavaScript动态渲染页面爬取——Selenium的使用(一)
JavaScript动态渲染页面爬取——Selenium的使用(一)
543 4
|
数据可视化 JavaScript 前端开发
低代码可视化工具--vue条件判断v-if可视化设置-代码生成器
低代码可视化工具--vue条件判断v-if可视化设置-代码生成器
265 2

热门文章

最新文章