Vue学习计划-Vue2--Vue核心(五)条件、列表渲染、表单数据

1. 条件渲染

  1. v-if

    1. v-if=“表达式”
    2. v-else-if = “表达式”
    3. v-else = “表达式”
      适用于:切换频率较低的场景

    特点:不显示dom元素,直接被删除

    注意:v-if和v-else-if、v-else一起使用,但要求结构不能被打断
    v-if和template一起使用, v-show不可以

  2. v-show v-show = “表达式” 适用于: 切换频率较高的场景 特点: 不展示dom元素,未被移除,仅仅是样式隐藏

  3. 备注:使用v-if时,元素可能无法取到,v-show一定可以获取到

示例:

	<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script></head><body><div id="app"><!-- v-show: 控制元素style样式中display属性实现显示与隐藏 --><p v-show="1 !== 3">这是v-show文本</p><p v-show="false">这是v-show文本</p><hr><!-- v-if: 对元素的删除与渲染 --><p v-show="1 !== 3">这是v-if文本</p><p v-if="true">这是v-if文本</p><hr><!-- v-if, v-else 的使用 --><button @click="n++">点击if事件</button><!-- <p v-if="n === 1">	8:00</p><p v-if="n === 1">	9:00</p><p v-if="n === 3">	10:00</p> --><p v-if="n === 1">	8:00</p><p v-else-if="n === 2">	9:00</p><p v-else-if="n === 3">	10:00</p><p v-else>其他时间</p><hr><!--v-if可以和 template使用,v-show不可以 --><!-- <p v-if="n === 1"> 小红</p><p v-if="n === 1"> 小李</p><p v-if="n === 1"> 小王</p> --><!-- template模板,不改变页面结构 --><!-- <template v-show="n === 1"> --><template v-if="n === 1"><p> 小红</p><p> 小李</p><p> 小王</p></template>	</div><script>const vm = new Vue({el: '#app',data: {n: 0,},})</script></body></html>

2. 列表渲染

  1. v-for
    1. 用于展示列表数据
    2. 语法:v-for=“(val, index) in arr” :key = yyy
    3. 可遍历:数组,对象,字符串(用的很少),指定次数(用的很少)
      示例:
	<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script></head><body><div id="app"><!-- 遍历数组 --><h2>人员列表</h2><ul><li v-for="(p, index) in persons" :key="index">{{ p.name }} - {{ p.age }}</li></ul><hr><!-- 遍历对象 --><ul><li v-for="(v, index) in obj" :key="index">{{ index }} - {{ v }}</li></ul><hr><!-- 遍历字符串(比较少用) --><ul><li v-for="(v, index) in 'ahggg'" :key="index">{{ index }} - {{ v }}</li></ul><hr><!-- 遍历数字(比较少用) --><ul><li v-for="(v, index) in 5" :key="index">{{ index }} - {{ v }}</li></ul></div><script>const vm = new Vue({el: '#app',data: {persons: [{ id: '001', name: '小红', age: 19 },{ id: '002', name: '小明', age: 20},{ id: '003', name: '小亮', age: 21}],obj: {name: '小丽',age: 19,sex: '女'}}})</script></body></html>
  1. key作用与原理

    1. 虚拟DOM中key的作用:
      1. key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,
      2. 随后Vue进行【新虚拟DOM】和【旧虚拟DOM】的差异比较,比较规则如下:
    2. 对比规则:
      1. 旧虚拟DOM中找到与新虚拟DOM相同的key:
        • 若虚拟DOM中的内容没有变,直接使用之前的真实DOM
        • 若虚拟DOM中的内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM
      2. 旧虚拟DOM中未找到与新虚拟DOM相同的key:
        • 创建新的真实DOM,随后渲染到页面
          在这里插入图片描述
          在这里插入图片描述
  2. 用index作为key可能会引发的问题:

    1. 若对数据进行:逆序添加、逆序删除等破坏顺序操作:
      • 会产生没有必要的真实DOM更新 ==>界面效果没问题,但效率低
    2. 如果结构中还包含输入类的DOM:
      • 会产生错误的DOM更新,页面有问题
  3. 开发中如何选择key:

    1. 最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号等唯一值
    2. 如果不存在对数据的逆序添加、逆序删除等破坏顺序的操作,仅用于渲染列表用于展示,使用index作为key是没有问题的

示例:

	<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script></head><body><div id="app"><!-- 唯一值作为key值: 逆序添加 --><button @click.once="handleClickUnshiftPerson">unshift添加person</button><ul><!-- <li v-for="(p, index) in persons" :key="p.id"> --><li v-for="(p, index) in persons" :key="index">{{ p.name }} - {{p.age }}<input type="text"></li></ul></div><script>const vm = new Vue({el: '#app',data: {persons: [{ id: 1, name: '小红', age: 19 },{ id: 2, name: '小梁', age: 20 },{ id: 3, name: '小名', age: 21 },]},methods: {handleClickUnshiftPerson(){this.persons.unshift({id: 4, name: '小丽', age:22})}},})</script></body></html>

3. 收集表单数据

  1. 若:<input type = "text"/>, 则v-model收集的是value值,用户输入的就是value值。
  2. 若:<input type = "radio"/>, 则v-model收集的是value值,且要给标签配置value值。
  3. 若:<input type = "checkbox"/>
    1. 没有配置input的value属性,v-model收集的就是checked(勾选 or 未勾选, 是布尔值)
    2. 配置input的value属性:
      • v-model 的初始值是非数组,那么收集的就是checked(勾选 or 未勾选, 是布尔值)
      • v-model 的初始值是数组,那么收集的就是value组成的数组
  4. 备注:v-model的三个修饰符:
    1. lazy: 失去焦点再收集数据
    2. number: 输入字符串转为有效的数字
    3. trim: 输入首尾空格过滤

示例:

	<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script></head><body><div id="app"><form @submit.prevent="demo"><!-- 完整写法 --><!-- <label for="demo">账号:</label> --><!-- <input type="text" id="demo"> -->账号:<input type="text" v-model.trim="obj.account">1{{ obj.account }}2<br><br>密码:<input type="password" v-model="obj.password"> {{ obj.password }}<br><br>年龄:<input type="number" v-model.number="obj.age"> {{ typeof(obj.age) }}<br><br>性别:男<input type="radio" name="sex" v-model="obj.sex" value="male">女<input type="radio" name="sex" v-model="obj.sex" value="female">{{ obj.sex }}<br><br>爱好:<!-- 多选框的初始值影响v-model收集回来的值 -->学习<input type="checkbox" v-model="obj.hobby" value="study" id="demo">打游戏<input type="checkbox" v-model="obj.hobby" value="game">读书<input type="checkbox" v-model="obj.hobby" value="read">{{ obj.hobby }}<br><br>家乡:<select v-model="obj.city"><option value="">请选择家乡</option><option value="sjz">石家庄</option><option value="xt">邢台</option><option value="hd">邯郸</option><option value="cd">承德</option></select>{{ obj.city }}<br><br>其他信息:<textarea v-model.lazy="obj.other"></textarea> {{ obj.other }}<br><br><input v-model="obj.argee" type="checkbox"> 阅读并接受<a href="http://www.baidu.com">《用户协议》</a> {{ obj.argee }}<br><br><button>提交</button></form></div><script>const vm = new Vue({el: "#app",data:{obj:{account: '',password: '',age: 18,sex: 'female',hobby: [],city:'',other: '',argee: false}},methods: {demo(){console.log(this.obj);}},})</script></body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/259217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于什么是 JVM

关于什么是 JVM&#xff0c;看看普通⼈和⾼⼿的回答。 普通人 JVM 就是 Java 虚拟机&#xff0c;是⽤来运⾏我们平时所写的 Java 代码的。优点是它会 ⾃动进⾏内存管理和垃圾回收&#xff0c;缺点是⼀旦发⽣问题&#xff0c;要是不了解 JVM 的运⾏ 机制&#xff0c; 就很难…

vuepress-----18、图片缩放

图片引入两种方式 地址 # 图片缩放插件 # 实战 md文件引入图片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安装配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

【Java 基础】25 比较器

文章目录 1.什么是比较器2.比较器的种类1&#xff09;Comparable2&#xff09;Comparator4&#xff09;组合比较器 总结 1.什么是比较器 比较器是用于对对象进行比较的工具 比较器允许开发者定义对象之间的顺序&#xff0c;使得排序和比较操作更加灵活。 还记得我们之前学的数…

3dMax vs Cinema4d哪个更好更适合你?

Cinema 4d和3dMax的区别 用于游戏风格、开发和风格可视化的3D建模、动画和渲染软件系统&#xff0c;为用户提供制作和编辑动画、视觉效果和环境的灵活性。4D CINEMA可能是由MAXON构建的强大的3D建模、运动图形、绘画和动画软件系统。Cinema 4D将在每个Windows和MAC操作系统上运…

DeepIn,UOS统信专业版安装运行Java,JavaFx程序

因为要适配国产统信UOS系统&#xff0c;要求JavaFx程序能简便双击运行&#xff0c;由于网上UOS开发相关文章少&#xff0c;多数文章没用&#xff0c;因此花了不少时间&#xff0c;踩了不少坑&#xff0c;下面记录一些遇到的问题&#xff0c;我的程序环境是jdk1.8&#xff0c;为…

信息解码(Message Decoding, ACM/ICPC World Finals 1991, UVa 213)

考虑下面的01串序列&#xff1a; 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1101, 1110, 00000, … 首先是长度为1的串&#xff0c;然后是长度为2的串&#xff0c;依此类推。如果看成二进制&#xff0c;相同长度的后 一个串等于前一个串加1。注意上述…

2023 开发人员生态系统现状信息图:《开发者生态系统现状报告》

本心、输入输出、结果 文章目录 2023 开发人员生态系统现状信息图&#xff1a;《开发者生态系统现状报告》前言目录细节软件开发者薪资趋势过去 3 年科技行业的性别分布 生成式 AI 服务的复杂格局开发者社区的心理健康花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准…

SpringBoot Seata 死锁问题排查

现象描述&#xff1a;Spring Boot项目&#xff0c;启动的时候卡住了&#xff0c;一直卡在那里不动&#xff0c;没有报错&#xff0c;也没有日志输出 但是&#xff0c;奇怪的是&#xff0c;本地可以正常启动 好吧&#xff0c;姑且先不深究为什么本地可以启动而部署到服务器上就无…

深入了解数据库锁:类型、应用和最佳实践

目录 1. 引言 2. 数据库锁的基本概念 2.1 悲观锁和乐观锁 2.2 排他锁和共享锁 3. 悲观锁的应用场景 3.1 长事务和大事务 3.2 并发修改 3.3 数据库死锁 4. 悲观锁的最佳实践 4.1 精细控制锁的粒度 4.2 避免死锁 4.3 考虑乐观锁 5. 案例分析 5.1 银行系统的转账操作…

python 使用 AppiumService 类启动appium server

一、前置说明 在Appium的1.6.0版本中引入了AppiumService类&#xff0c;可以很方便的通过该类来管理Appium服务器的启动和停止。 二、操作步骤 import osfrom appium.webdriver.appium_service import AppiumService as OriginalServerfrom libs import pathclass AppiumSer…

Zabbix补充

Zabbix的自动发现机制&#xff1a; Zabbix客户端主动和服务端联系&#xff0c;将自己的地址和端口发送服务端&#xff0c;来实现自动添加主机 客户端是自动的一方 缺点&#xff1a;自定义的网段的主机数量太多&#xff0c;登记耗时会很久&#xff0c;而且这个自动发现机制不是…

网络运维与网络安全 学习笔记2023.12.1

网络运维与网络安全 学习笔记 第三十二天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…