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.mzph.cn/news/203703.shtml

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

相关文章

Android笔记(十七):PendingIntent简介

PendingIntent翻译成中文为“待定意图”&#xff0c;这个翻译很好地表示了它的涵义。PendingIntent描述了封装Intent意图以及该意图要执行的目标操作。PendingIntent封装Intent的目标行为的执行是必须满足一定条件&#xff0c;只有条件满足&#xff0c;才会触发意图的目标操作。…

Kotlin 中的 also 和 run:选择正确的作用域函数

在 Kotlin 中&#xff0c;also 和 run 是两个十分有用的作用域函数。 虽然它们在功能上相似&#xff0c;但各自有独特的用途和适用场景。 一、分析&#xff1a; also&#xff1a;在对象的上下文中执行给定的代码块&#xff0c;并返回对象本身。它的参数是一个接收对象并返回…

分布式分布式事务分布式锁分布式ID

目录 分布式分布式系统设计理念目标设计思路中心化去中心化 基本概念分布式与集群NginxRPC消息中间件&#xff08;MQ&#xff09;NoSQL&#xff08;非关系型数据库&#xff09; 分布式事务1 事务2 本地事务3 分布式事务4 本地事务VS分布式事务5 分布式事务场景6 CAP原理7 CAP组…

ChatGPT发展历程

ChatGPT是一个在2020年成立的在线聊天平台&#xff0c;它的发展历程如下&#xff1a; 初期阶段&#xff1a;2020年&#xff0c;在全球疫情爆发的情况下&#xff0c;ChatGPT创始人开始思考如何为人们提供一个快捷、安全、便利的在线聊天平台。他们选择使用GPT&#xff08;生成对…

(2/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)

附录 A1 - 《PMBOK指南》映射 表A1显示了第六版《PMBOK指南》中定义的项目管理过程组与知识领域之间的对应关系 本附录说明了如何利用混合和敏捷方法处理《PMBOK指南》知识领域&#xff08;请参见表A1-2&#xff09;中所述的属性&#xff0c;其中涵盖了相同和不同的属性&…

conda 安装教程分享

大家好&#xff0c;我是微赚淘客系统的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我将向大家介绍如何使用conda进行安装。 首先&#xff0c;让我们来了解一下conda。conda是Anaconda发行版的一部分&#xff0c;它是一个开源的包管理系…

为什么那些删库跑路的人都极其下流

为什么那些删库跑路的人都极其下流&#xff1f;因为真的下流。注意&#xff0c;我不是针对跑路者的人品&#xff0c;遇到不公正待遇不敢反抗本身就比下流还下流&#xff0c;我说的是这种对抗方式太多低等。 干不好是能力问题&#xff0c;你不干是态度问题。记住我的话&#xf…

golang版aes-cbc-pkcs7加密解密base64hex字符串输入输出

最近项目中golang项目中使用aes加解密&#xff0c;做个记录方便以后使用 aes-cbc-pkcs7加密解密base64输入输出 type AesBase64 struct {key []byte // 允许16,24,32字节长度iv []byte // 只允许16字节长度 }func NewAesBase64(key []byte, iv []byte) *AesBase64 {return &…

C#网络应用程序(Web页面浏览器、局域网聊天程序)

目录 一、创建Web页面浏览器 1.示例源码 2.生成效果 二、局域网聊天程序 1.类 2.服务器端 3.客户端 一、创建Web页面浏览器 TextBox 控件用来输入要浏览的网页地址&#xff0c;Button控件用来执行浏览网页操作&#xff0c; WebBrowser控件用来显示要浏览的网页。这个控…

Matlab 曲线动态绘制

axes(handles.axes1); % 选定所画坐标轴 figure也可 h1 animatedline; h1.Color b; h1.LineWidth 2; h1.LineStyle -; % 线属性设置 for i 1 : length(x)addpoints(h1,x(i),y(i)); % x/y为待绘制曲线数据drawnow;pause(0.01); % 画点间停顿 end 示例&#xff1a; figure…

exynos4412—中断处理

一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 内部中断 CPU执行程序的过程中&#xff0c;发生的一些硬件出错、运算出错事件&#xff08;如分母为0、溢出等等&#xff09;&#xff0c;不可屏蔽外部中断 外设发…

scitb包1.6版本发布,一个为制作专业统计表格而生的R包

目前&#xff0c;本人写的scitb包1.6版本已经正式在R语言官方CRAN上线&#xff0c;scitb包是一个为生成专业化统计表格而生的R包。 可以使用以下代码安装 install.packages("scitb")安装过旧版本的从新安装一次就可以升级了,根据粉丝的建议&#xff0c;增加了Overal…

RocketMQ-RocketMQ集群实践(搭建)

搭建RocketMQ可视化管理服务 下载可视化客户端源码下载 | RocketMQ 这里只提供了源码&#xff0c;并没有提供直接运行的jar包。将源码下载下来后&#xff0c;需要解压并进入对应的目录&#xff0c;使用maven进行编译。(需要提前安装maven客户端) mvn clean package -Dmaven.t…

手动部署1个Cloud Run service

什么是Cloud Run 来自chatgpt&#xff1a; Google Cloud Run 是一项全托管的服务器托管平台&#xff0c;它允许您在容器化的环境中运行无服务器应用程序。Cloud Run 提供了一种简单而灵活的方式来构建、部署和扩展应用程序&#xff0c;无需管理底层基础设施。 以下是 Cloud …

sql常用语法练习

表名word namecontinentareapopulationgdpAfghanistanAsia6522302550010020343000000AlbaniaEurope28748283174112960000000AlgeriaAfrica238174137100000188681000000AndorraEurope468781153712000000AngolaAfrica124670020609294100990000000.... 基础练习 基础查询 1、阅…

RocketMq实战(待完善)

目录 生产者 发送消息固定步骤 发送模式 1. 单向发送 2. 同步发送 3. 异步发送 生产消息完整代码 消费者 消费消息固定步骤 简单消费代码示例 消息模型 广播消息 顺序消息 延迟消息 批量消息 事务消息 生产者 发送消息固定步骤 1.创建消息生产者producer&#…

操作系统的运行机制+中断和异常

一、CPU状态 在CPU设计和生产的时候就划分了特权指令和非特叔指令&#xff0c;因此CPU执行一条指令前就能断出其类型 CPU有两种状态&#xff0c;“内核态”和“用户态” 处于内核态时&#xff0c;说明此时正在运行的是内核程序&#xff0c;此时可以执行特权指令。 处于用户态…

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包,部署

环境准备Jenkins工具、环境、插件配置全局变量配置安装插件Deploy to containerMaven Integration plugin配置国内mvn源 创建maven项目 环境准备 1、安装服务 Jenkins工具、环境、插件配置 全局变量配置 Manage Jenkins>tools>JDK 安装 安装插件 Deploy to contai…

231206日课:高原反应的第三天

早冥读写跑&#xff08;早起、冥想、阅读、写作、跑步&#xff09; 践行第三天 一、知识基础 早起 冥想 阅读 写作 运动 二、个人化运用 日程复盘 优秀的AI生成的表格 汇总信息时间段安排睡眠时间20:54-04:57睡眠时间 (8小时3分钟)早晨时间安排04:57-05:00起床、洗漱早晨时间安…

C++异常抛出机制:throw和try_catch

文章目录 前言正文初识throw和try_catch深入&#xff08;std::runtime_error和std::exception&#xff09;异常处理的必要性 前言 还记得初学C的时候&#xff0c;我抱着《C primer 5th》这本书硬啃&#xff0c;作为一个初学者&#xff0c;里面很多东西当时都很不理解&#xff…