当前位置: 首页 > news >正文

Vue学习(三)条件渲染、列表渲染

条件渲染

v-if

写法:v-if=”表达式”(v-else-if=”表达式”、v-else)

适用于:切换频率较低的场景。

特点:不展示的DOM元素直接被移除

注意:v-if和v-else-if和v-else一起使用时,结构要紧挨在一起。v-if还可以和template标签一起使用,包含在template标签里面的内容会一起受到template标签的v-if的作用,且不会修改dom的结构

v-show

写法:v-show=”表达式”

适用于:切换频率较高的场景。

特点:不展示的dom未被移除,仅仅是使用样式隐藏了,设置了display属性使得其dom不展示

条件渲染 例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><h3 v-show="false">你好,{{name}} </h3><br/><h3 v-show="1 === 2">你好,{{name}} </h3><br/><h3 v-show="false">你好,{{name}} </h3><br/><h3 v-if="false">你好,{{name}} </h3><br/><br/><h2>当前n的值为{{n}}</h2><button @click="n++">点我n加一</button><div v-show="n % 3 == 0">曼波</div><div v-show="n % 3 == 1">哈基米</div><div v-show="n % 3 == 2">阿弥诺斯</div><hr/><div v-if="n % 3 == 0">曼波</div><div v-if="n % 3 == 1">哈基米</div><div v-if="n % 3 == 2">阿弥诺斯</div><hr/><div v-if="n % 3 === 0">曼波</div><div v-else-if="n % 3 === 0">哈基米</div><div v-else>阿弥诺斯</div><template v-if="n % 3 == 1"><h2>呵呵呵</h2><h2>wow</h2><h2>哦耶</h2></template></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',n:0}})</script>
</html>

列表渲染

列表渲染使用的语法是v-for=”a in A”,其中,a是迭代中的每一代的数据,A是迭代目标(可以是数组、对象,字符串也可以,但是字符串的遍历用的不多,当成一个字符数组就行)

当迭代目标是数组时

此时a代表着数组中的每一个元素,假如数组中的元素是对象,要引用其中的属性,使用{{a.属性}}即可。

除此之外,还要记得标明元素的唯一性标识,使用:key=”a.属性(唯一性标识)”

a还可以写作(a,index),即v-for=”(a,index) in A”,此时第一个参数a代表着数组中的每一个元素,第二个参数index代表着数组中元素的下标。所以如果数组中的元素不是对象或者没有唯一性标识,可以使用index作为唯一性标识。

  	  <ul><li v-for="person in persons" :key="person.id">姓名:{{person.name}}  年龄:{{person.age}}</li></ul>

如此页面上就会遍历展示persons中的每个person的相关信息

还可以写作v-for=”a in 数字”,意思是遍历几次,a in 5就是遍历五次。用的比较少。

当迭代目标是对象时

此时的a应该写作(value,key),唯一性标识写key即可,此时的key就是属性名,value就是属性值

      <ul><li v-for="(value,key) in cars" :key="key">{{key}}是{{value}}</li></ul>

案例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><h3>你好,{{name}} </h3><br/><!-- 遍历数组 --><ul><li v-for="person in persons" :key="person.id">姓名:{{person.name}}  年龄:{{person.age}}</li></ul><hr/><!-- index是元素在数组中的索引 --><ul><li v-for="(person,index) in persons" :key="person.id">姓名:{{person.name}}  --年龄:{{person.age}} --index: {{index}}</li></ul><!-- 对象 --><ul><li v-for="(value,key) in cars" :key="key">{{key}}是{{value}}</li></ul></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',persons:[{id:'001',name:'张三',age:18},{id:'002',name:'李四',age:19},{id:'003',name:'王五',age:20}],cars:{name:'比亚迪',price:20000,color:'black'}}})</script>
</html>

key的作用:key是虚拟DOM对象的标识,当状态中的数据发生变化时,vue会根据新的数据生产新的虚拟DOM,随后vue会将新的虚拟DOM和旧的虚拟DOM进行比较,当key相同以及其中内容相同时才会直接使用之前的虚拟DOM。如此才不会出现错误的DOM更新。并且使用key时,能在插入数据时,不会出现多条数据的虚拟DOM更新,效率更高。

列表过滤

监视属性实现

没有新的知识点,直接见案例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><input type="text" placeholder="请输入名字" v-model="keyWords"><ul><li v-for="person in Fpersons" :key="person.id">--姓名:{{person.name}} --年龄:{{person.age}} --性别:{{person.gender}}</li></ul><hr/></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',keyWords:'',persons:[{id:'001',name:'亚托克斯',age:18,gender:'男'},{id:'002',name:'维鲁斯',age:19,gender:'男'},{id:'003',name:'希维尔',age:20,gender:'女'},{id:'004',name:'伊泽瑞尔',age:21,gender:'男'}],Fpersons:[]},watch:{keyWords:{immediate:true,handler(newValue){this.Fpersons=this.persons.filter((p)=>{return p.name.indexOf(newValue) !== -1})}}}})</script>
</html>

计算属性实现

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><input type="text" placeholder="请输入名字" v-model="keyWords"><ul><li v-for="person in Fpersons" :key="person.id">--姓名:{{person.name}} --年龄:{{person.age}} --性别:{{person.gender}}</li></ul><hr/></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',keyWords:'',persons:[{id:'001',name:'亚托克斯',age:18,gender:'男'},{id:'002',name:'维鲁斯',age:19,gender:'男'},{id:'003',name:'希维尔',age:20,gender:'女'},{id:'004',name:'伊泽瑞尔',age:21,gender:'男'}]},computed:{Fpersons(){return this.persons.filter((p)=>{return p.name.indexOf(this.keyWords) !== -1})}}})</script>
</html>

可以看出,此时计算属性实现更为方便

列表排序

在计算属性的逻辑中加上排序的逻辑即可

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><link rel="icon" href="favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vite App</title><script type="text/javascript" src="../vue.js"></script></head><body><div id="root"><input type="text" placeholder="请输入名字" v-model="keyWords"><ul><li v-for="person in Fpersons" :key="person.id">--姓名:{{person.name}} --年龄:{{person.age}} --性别:{{person.gender}}</li></ul><button @click="order = 0">原顺序</button><button @click="order = 1">降序</button><button @click="order = 2">升序</button><hr/></div></body><script type="text/javascript">new Vue({el:'#root',data:{name:'李二狗',keyWords:'',order:0, //排序方式,0原顺序,1降序,2升序persons:[{id:'001',name:'亚托克斯',age:18,gender:'男'},{id:'002',name:'维鲁斯',age:17,gender:'男'},{id:'003',name:'希维尔',age:22,gender:'女'},{id:'004',name:'伊泽瑞尔',age:21,gender:'男'}]},computed:{Fpersons(){const arr = this.persons.filter((p)=>{return p.name.indexOf(this.keyWords) !== -1})//判断是否需要排序if(this.order != 0){arr.sort((p1,p2)=>{if(this.order == 1){return p2.age - p1.age}else if(this.order == 2){return p1.age - p2.age}})}return arr}}})</script>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux--shell脚本语言—/—<1>
  • 【C++学习第19天】最小生成树(对应无向图)
  • 数据分析_01_Python基础
  • 【C++】一堆数组案例 元素逆置
  • 自定义线程池(二)
  • 【带你入门生信】什么是生物信息学
  • [Linux安全运维] Nginx安装部署以及LNMP框架搭建保姆级教程
  • 基于微信小程序的微课堂笔记的设计与实现(源码+论文+部署讲解等)
  • C语言--函数
  • 【dijkstra】迪杰斯特拉算法 洛谷 P1828例题代码讲解
  • C++与云计算的融合:构建高效、可扩展的云服务
  • 逻辑推理之lora微调
  • 2024/8/3 英语每日一段
  • 数据结构与算法 - 堆
  • Halcon 模型变化
  • php的引用
  • SegmentFault for Android 3.0 发布
  • __proto__ 和 prototype的关系
  • 【391天】每日项目总结系列128(2018.03.03)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android框架之Volley
  • echarts花样作死的坑
  • HTTP请求重发
  • java第三方包学习之lombok
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • magento 货币换算
  • Next.js之基础概念(二)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • springboot_database项目介绍
  • Web设计流程优化:网页效果图设计新思路
  • windows下使用nginx调试简介
  • 好的网址,关于.net 4.0 ,vs 2010
  • 猴子数据域名防封接口降低小说被封的风险
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 数组的操作
  • 原生JS动态加载JS、CSS文件及代码脚本
  • scrapy中间件源码分析及常用中间件大全
  • ​io --- 处理流的核心工具​
  • ​低代码平台的核心价值与优势
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #if和#ifdef区别
  • #NOIP 2014# day.2 T2 寻找道路
  • #Z0458. 树的中心2
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (4)事件处理——(7)简单事件(Simple events)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (备份) esp32 GPIO
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm码农论坛 毕业设计 231126
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (七)glDrawArry绘制
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (顺序)容器的好伴侣 --- 容器适配器