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

news2024/11/27 20:52:11

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.coloradmin.cn/o/1291283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

观海微电子---线路腐蚀的起因与对策

线路腐蚀的原理&#xff1a; 在线路表面的污染物中含有金属元素的离子或金属化合物&#xff0c; 在潮湿的空气中这些污染物与线路之间的冷凝水连成微电池&#xff0c;引发电化学反应&#xff0c;产品通电的情况下反应进行得更快&#xff0c;耗损线路导致线路腐蚀形成断线。 腐…

空对象指针为什么有时候能调用成员函数

在谈这个话题之前呢&#xff0c;还是得了解一下内存布局&#xff0c;以x86的32位系统为例&#xff1a; 然后得明确一点&#xff0c;NULL指针是无法访问的&#xff0c;如果强行访问&#xff0c;则会引发异常 然而空对象指针有时候却能够调用成员函数 class C { public:int a;st…

《论文阅读》用于情绪回复生成的情绪正则化条件变分自动编码器 Affective Computing 2021

《论文阅读》用于情绪回复生成的情绪正则化条件变分自动编码器 前言简介模型结构实验结果总结前言 今天为大家带来的是《Emotion-Regularized Conditional Variational Autoencoder for Emotional Response Generation》 出版:IEEE Transactions on Affective Computing 时间…

应用在大功率驱动器中的IGBT晶圆

功率器件驱动器是电力电子系统的低压信号控制电路和高压主电路之间的接口&#xff0c;是功率器件应用的关键技术与难点之一。功率器件中的晶体管和晶闸管在应用中需要驱动器的驱动信号才可运行&#xff0c;功率器件驱动器的通常作用是电气隔离、信号传输与放大及功率器件的保护…

【力扣】206.反转链表

206.反转链表 这道题有两种解法&#xff0c;但不只有两种&#xff0c;嘿嘿。 法一&#xff1a;迭代法 就是按循序遍历将每一个指针的指向都给改了。比如说1——>2——>3改为null<——1<——2<——3这样。那这里以第二个结点为例&#xff0c;想一想。我想要指向…

怎样提升Windows Server安全性?

在Windows Server环境中&#xff0c;审计对于处理安全、运营和合规需求至关重要。然而&#xff0c;微软活动目录安全审计工具存在固有限制&#xff0c;包括专业知识需求、耗时的过程和缺失的功能&#xff0c;因此我们需要第三方审计工具&#xff0c;如ManageEngine ADAudit Plu…

Pytorch CIFAR10图像分类 ShuffleNetv2篇

Pytorch CIFAR10图像分类 ShuffleNetv2篇 文章目录 Pytorch CIFAR10图像分类 ShuffleNetv2篇4. 定义网络&#xff08;ShuffleNetv2&#xff09;高效网络设计实用指南指南一&#xff1a;同等通道大小最小化内存访问量指南二&#xff1a;过量使用组卷积会增加MAC指南三&#xff1…

动手学深度学习——Anaconda、pytorch、paddle安装(cpu版本)

之前出了个Windows下的深度学习安装&#xff0c;但在继续学习的过程中发现&#xff0c;沐神的一些代码跑不起来&#xff0c;这里又提供pytorch和paddle的安装&#xff0c;各位用pytorch或者百度飞桨paddlepaddle来学习深度学习也是可以的。 安装Anaconda 1. 打开Anaconda链接&…

2023 年最新 FPV 套件评测

FPV 飞行是近年来非常流行的一种新兴运动。它可以让您在第一人称视角下体验飞行的乐趣。FPV 套件可以分为多种类型&#xff0c;根据您的需求和预算&#xff0c;您可以选择合适的套件。 下面我们将对 2023 年最新的几款 FPV 套件进行评测&#xff0c;帮助您选择合适的产品。 Sp…

轨迹分析:Palantir评估细胞分化潜能 类似于monocle2

轨迹分析是单细胞测序分析中重要的组成部分&#xff0c;它基于细胞谱系之间“具有中间态细胞”的理论基础&#xff0c;通过结合先验知识&#xff08;细胞注释、markers&#xff09;、细胞基因表达改变等&#xff0c;为在单细胞测序数据赋予了“假时间”&#xff08;pseudotime&…

Python接口自动化测试:断言封装详解

概要 在进行API接口测试时&#xff0c;断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中&#xff0c;我们可以利用一些库来实现断言功能。 1. 安装必要的库 在Python中&#xff0c;我们主要会使用两个库&#xff1a;requests和jsonpath。…

三:爬虫-网络请求模块(下)

三&#xff1a;网络请求模块&#xff08;下&#xff09; 1.Requests模块&#xff1a; ​ Requests是用Python语言编写&#xff0c;基于urllib&#xff0c;采用 Apache2 Licensed开源协议的 HTTP 库&#xff0c;它比urllib更加的方便&#xff0c;可以节约我们大量的工作&#…

可编程电子负载在新能源汽车领域的应用,你知道多少?

可编程电子负载在新能源汽车领域的应用非常广泛&#xff0c;主要体现在以下几个方面。 电池测试&#xff1a;新能源汽车的核心是电池&#xff0c;而电池的性能直接影响到汽车的续航里程、充电速度等关键指标。可编程电子负载可以模拟各种复杂的充放电工况&#xff0c;对电池进行…

SQL Server 数据库,创建触发器避免数据被更改

5.4触发器 触发器是一种特殊类型的存储过程&#xff0c;当表中的数据发生更新时将自动调用&#xff0c;以响应INSERT、 UPDATE 或DELETE 语句。 5.4.1什么是触发器 1.触发器的概念 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程&#xff0c;触发器通常用于强…

彻底解决公网ip无法访问服务器的问题

用服务器的公网ip访问突然提示页面无法访问了&#xff0c;之前还是ok的&#xff1a; 解决方案&#xff1a; 步骤1. 检查云服务器的安全组规则是否有添加80端口映射&#xff0c;如果没有需要手动添加&#xff0c;否则不能使用公网访问&#xff0c;检查了一下是有的&#xff1…

SpringBoot3-实现和注册拦截器

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

项目管理:为什么项目计划必不可少

项目管理计划定义了如何执行、监督和控制项目。项目计划让我们准确地知道在项目的每个阶段应该做什么&#xff0c;在哪里分配资源和时间&#xff0c;以及在事情超出计划或超出预算时要注意什么。 为了项目中获得成功&#xff0c;管理者需要在前期创建一个项目计划&#xff0c…

el-menu标题过长显示不全问题处理

项目基于vue-element-admin 问题 期望 处理方式 \src\layout\components\Sidebar\index.vue 文件后添加CSS <style scped> /* 侧栏导航菜单经典 文字超长溢出问题 CSS折行 */ .el-submenu__title {display: flex;align-items: center; } .el-submenu__title span {white-…

LeetCode题:931下降路径最小和

目录 一、题目要求 二、解题思路 &#xff08;1&#xff09;状态表示 &#xff08;2&#xff09;状态转移方程 &#xff08;3&#xff09;初始化 &#xff08;4&#xff09;填表顺序 &#xff08;5&#xff09;返回值 三、代码 一、题目要求 931. 下降路径最小和 给你…

【android开发-18】android中运行时申请权限详解

1&#xff0c;android权限机制 在Android中&#xff0c;权限机制是一种保护用户隐私和数据安全的重要机制。它允许应用程序在访问敏感或危险的数据或资源时获取特定的权限。以下是Android中权限机制的详细解释&#xff1a; 1&#xff0c;权限类别&#xff1a;Android将权限分…