Vue3学习---【内置指令】【从零开始的Vue3学习】

目录

前言:

v-text

v-html

v-show

v-if

v-else

v-else-if

注意:

v-for

v-for中可以访问父作用域

v-for的多层嵌套

使用of代替in

v-for与对象

v-for中使用范围值

通过key来管理状态

v-on

示例

v-on作用于不同对象

v-bind

v-model

v-pre

v-once

v-cloak

前言:

Vue3学习---【API】【从零开始的Vue3学习!!!】-CSDN博客

v-text

  • 更新元素的文本内容

v-text通过设置元素的textContent属性来工作,因此它将覆盖元素中所有现有的内容

v-text的效果与“文本模板(双花括号{{}})一致

<body><div id="app">{{content}}<br><span v-text="content"></span></div><script>const app = Vue.createApp({data(){return {content:"这是一个示例文本."}}});app.mount("#app")</script>
</body>

效果:

v-html

  • 更新元素的innerHTML

v-html的内容直接作为普通HTML插入

即:“Vue模板语法是不会被解析的”(不推荐使用)

<body><div id="app"><span v-html="myHtml"></span></div><script>const app = Vue.createApp({data(){return {myHtml:"<span style='color:red'>我是一个Html</span>"}}});app.mount("#app")</script>
</body>

效果:

v-show

  • 基于表达式值的真假性,来改变元素的可见性

v-show通过设置:“内联样式的CSS属性display”来工作

<body><div id="app"><span style='color: red;' v-show="isColor1">我被v-show控制</span><span style='color: blue;' v-show="isColor2">我也被v-show控制</span></div><script>const app = Vue.createApp({data(){return {isColor1:true,isColor2:false,}}});app.mount("#app")</script>
</body>

效果:

v-if

  • 基于表达式值的真假性,来条件性地渲染元素或者模板片段
  • 与编程语言一样,v-if下有“v-else”、“v-else-if

v-if用于条件性地渲染一块内容,这些内容只有在指令的表达式返回真值时才被渲染

v-if不同于v-showv-show是通过display属性来控制,而v-if则是使用“注释”的方法来控制,当返回一个假值时,v-if所在语句将会被Vue注释掉

<body><div id="app"><span style='color: red;' v-if="isIf1">我被v-if控制</span><span style='color: blue;' v-if="isIf2">我也被v-if控制</span></div><script>const app = Vue.createApp({data(){return {isIf1:true,isIf2:false,}}});app.mount("#app")</script>
</body>

 效果:

v-else

  • v-else是v-if的否定,当v-if返回假值时,v-else语句将会被渲染
  • v-else必须跟在一个“v-if”或“v-else-if”后面,否则将不会被识别
<body><div id="app"><button @click="isClick = !isClick">点击渲染不同内容</button><br><span style='color: red;' v-if="isClick">我是红色</span><span style='color: blue;' v-else="isClick">我是蓝色</span></div><script>const app = Vue.createApp({data(){return {isClick:true,}}});app.mount("#app")</script>
</body>

效果:

v-else-if

  • v-else-if对应于编程语言中的else if,作用一致
<body><div id="app"><button @click="isClick = 1">点击渲染红色文本</button><br><br><button @click="isClick = 2">点击渲染蓝色文本</button><br><br><button @click="isClick = 3">点击渲染紫色文本</button><br><br><span style='color: red;' v-if="switchColor() == 1">我是红色</span><span style='color: blue;' v-else-if="switchColor() == 2">我是蓝色</span><span style='color: purple;' v-else="switchColor() == 3">我是紫色</span></div><script>const app = Vue.createApp({data(){return {isClick:1,}},methods:{switchColor(){if(this.isClick == 1){return 1;}else if (this.isClick == 2){return 2;}else {return 3;}}}});app.mount("#app")</script>
</body>

效果:

注意:

  • v-if是“真实的”按条件渲染,条件区块内的事件监听器和子组件都会被销毁与重建
  • v-if是“惰性”的,如果在初次渲染时值为false,则不会做任何事
  • v-if的切换开销比v-show大的多,如果需要频繁切换,使用v-show较好
  • v-ifv-for同用时(不推荐一起使用),v-if优先级大于v-for

v-for

  • 基于原始数据多次渲染元素或模板块
  • 可以绑定值类型有:“数组”、“对象”、“数字”、“字符串”、“可迭代对象
  • 语法格式为:“value in values”形式的语法,values原数据数组value数组迭代中的别名
  • v-for常用来做列表渲染
<body><div id="app"><ul><li v-for="item in items">{{item}}</li></ul></div><script>const app = Vue.createApp({data(){return {items:[1,2,3,4]}}});app.mount("#app")</script>
</body>

效果:

v-for中可以访问父作用域

v-for中可以访问顶层Vue应用中的属性方法v-for也支持使用可选的第二个参数表示当前项的位置索引

<body><div id="app"><ul><li v-for="(value,index) in values">我是{{topVariable}},我的索引是{{index}},我的名字是{{value}}</li></ul></div><script>const app = Vue.createApp({data(){return {topVariable:"Hello I am fruit",values:["apple","banana"]}}});app.mount("#app")</script>
</body>

效果:

注意:

  • 与其它编程语言的索引迭代不同,在Vue中是“变量在前,索引在后”,即:“(value index)

v-for的多层嵌套

  • v-for的多层嵌套,作用域与单层v-for的作用域一致
<body><div id="app"><ul><li v-for="value in values">{{topVariable}}<span v-for="childValue in value" style="border:1px solid">{{topVariable}}:{{childValue}}</span></li></ul></div><script>const app = Vue.createApp({data(){return {topVariable:"Hello!!",values:[["apple","banana"],["dog","cat"]]}}});app.mount("#app")</script>
</body>

效果:

使用of代替in

<div v-for="item of items"></div>

v-for与对象

  • 使用v-for遍历一个对象所有属性时,遍历的顺序会基于对该对象调用Object.values()
  • 直接使用“value in values”返回的是对象值
<body><div id="app"><ul><li v-for="value in values">{{value}}</li></ul></div><script>const app = Vue.createApp({data(){return {values:{title:"Vue 3.0",content:"Hello Vue 3.0"}}}});app.mount("#app")</script>
</body>

效果:

我们可以提供第二个参数表示属性名(键)

<li v-for="(value,key) in values">{{key}}的值是:{{value}}
</li>

效果:

也可以添加第三个参数表示位置索引

<li v-for="(value,key,index) in values">{{key}}的值是:{{value}},索引是{{index}}
</li>

效果:

v-for中使用范围值

  • v-for可以直接接受一个整数值,此时模板会基于“1,2,3...n”的取值范围重复多次
<li v-for="n in 10">{{ n }}
</li>

效果:

通过key来管理状态

Vue默认按照“就地更新”的策略来更新通过v-for渲染的元素列表,当数据项的顺序改变时,Vue不会随之移动DOM元素的顺序,而是就地更新每个元素

但我们可以通过给v-for添加一个唯一的“key”属性,来表示唯一的遍历元素,当某个元素更新时,Vue可以通过这个key属性确定这个元素,从而只更新这一个元素

但这个属性并不是真实存在的属性,仅在Vue中可见

<body><div id="app"><ul><li v-for="value in values" :key="value.id">{{ value.name }}</li></ul></div><script>const app = Vue.createApp({data(){return {values: [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Charlie' }]}}});app.mount("#app")</script>
</body>

效果:

v-on

  • 给元素绑定事件监听器
  • 绑定值类型:“Function(函数)”、“Inline Statement(内联语句)”、“Object(对象)
  • 参数:“event”(使用对象语法则为可选项)
  • 修饰符
    • .stop:调用event.stopPropagation()
    • .prevent:调用event.preventDefault()
    • .capture:在捕获模式添加事件监听器
    • .self:只有事件从元素本身发出来触发处理函数
    • .{keyAlias}:只在某些按键下触发处理函数
    • .once:最多触发一次处理函数
    • .left:只在鼠标左键事件触发处理函数
    • .right:只在鼠标右键事件触发处理函数
    • .middle:只在鼠标中键触发处理函数
    • .passive:通过{passive:true}附加一个DOM事件
  • 简写:“@

示例

<!-- 方法处理函数 -->
<button v-on:click="doThis"></button><!-- 动态事件 -->
<button v-on:[event]="doThis"></button><!-- 内联声明 -->
<button v-on:click="doThat('hello', $event)"></button><!-- 缩写 -->
<button @click="doThis"></button><!-- 使用缩写的动态事件 -->
<button @[event]="doThis"></button><!-- 停止传播 -->
<button @click.stop="doThis"></button><!-- 阻止默认事件 -->
<button @click.prevent="doThis"></button><!-- 不带表达式地阻止默认事件 -->
<form @submit.prevent></form><!-- 链式调用修饰符 -->
<button @click.stop.prevent="doThis"></button><!-- 按键用于 keyAlias 修饰符-->
<input @keyup.enter="onEnter" /><!-- 点击事件将最多触发一次 -->
<button v-on:click.once="doThis"></button><!-- 对象语法 -->
<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>

v-on作用于不同对象

v-on作用于普通元素时,只监听原生DOM事件

当用于自定义元素组件,则监听子组件触发的自定义事件

<body><div id="app"><button @click="handle('hello',$event)">点击我</button></div><script>const app = Vue.createApp({methods:{handle(...args){console.log(args);}}});app.mount("#app")</script>
</body>

效果:

v-bind

  • 动态的绑定一个或多个attribute(属性),也可以是组件的prop
    • 缩写:“:”或者“.”(当时用prop修饰符时)
    • 值可以省略(当attribute绑定的值同名时)
  • 绑定值类型:“any(带参数)”、“Object(不带参数)
  • 参数:attrOrProp(可选的)
  • 修饰符:
    • .camel:将短横线命名的attribute转变为驼峰式命名
    • .prop:强制绑定为DOM property
    • .attr:强制绑定为DOM attribute
<!-- 绑定 attribute -->
<img v-bind:src="imageSrc" /><!-- 动态 attribute 名 -->
<button v-bind:[key]="value"></button><!-- 缩写 -->
<img :src="imageSrc" /><!-- 缩写形式的动态 attribute 名 (3.4+),扩展为 :src="src" -->
<img :src /><!-- 动态 attribute 名的缩写 -->
<button :[key]="value"></button><!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName" /><!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]"></div><!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div><!-- 绑定对象形式的 attribute -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div><!-- prop 绑定。“prop” 必须在子组件中已声明。 -->
<MyComponent :prop="someThing" /><!-- 传递子父组件共有的 prop -->
<MyComponent v-bind="$props" /><!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>

v-model

  • 表单输入元素或组件上创建双向绑定
  • 绑定值类型:“根据表单输入元素或组件输出的值而变化
  • 仅限于:
    • <input>
    • <select>
    • <textarea>
    • components
  • 修饰符:
    • .lazy:监听change事件而不是input
    • .number:将输入的合法字符串转为数字
    • .trim:移除输入内容两端空格
<body><div id="app"><p>这是你输入的信息: {{content}}</p><input type="text"v-model="content"></input></div><script>const app = Vue.createApp({data(){return {content:""}}});app.mount("#app")</script>
</body>

效果:

v-pre

  • 跳过该元素及其所有子元素的编译

元素内具有v-pre,所有Vue模板语法都不会渲染,保留原形式(保留大括号等)

<body><div id="app"><p v-pre>{{ content }}</p><!-- v-html和v-pre共用时,v-pre将会覆盖v-html --><span v-html="myHtml" v-pre></span></div><script>const app = Vue.createApp({data(){return {myHtml:"<span>这是 HTML 代码 </span>",content:"Hello Vue"}}});app.mount("#app")</script>
</body>

效果:

v-once

  • 仅渲染元素和组件一次,并跳过之后的更新

在随后的重新渲染,元素/组件及其所有的子项都会被当做静态内容并跳过渲染,这可以用来优化更新时的性能

<!-- 单个元素 -->
<span v-once>This will never change: {{msg}}</span>
<!-- 带有子元素的元素 -->
<div v-once><h1>Comment</h1><p>{{msg}}</p>
</div>
<!-- 组件 -->
<MyComponent v-once :comment="msg" />
<!-- `v-for` 指令 -->
<ul><li v-for="i in list" v-once>{{i}}</li>
</ul>

v-cloak

  • 用于隐藏尚未完成编译的DOM模板

该指令只在没有构建步骤的环境下需要使用

当使用直接在DOM中书写的模板时,可能会出现一种“未编译模板闪现”的情况:

用户可能先看到是还没先编译完成的双大括号标签,直到挂载的组件将它们替换为实际渲染的内容

v-cloak会保留在所绑定的元素上,直到相关组件实例被挂载后才移除

配合“v-cloak{display:none}”这样的CSS规则,它可以在组件编译完毕前隐藏原始模板

[v-cloak] {display: none;
}<div v-cloak>{{ message }}
</div>

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

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

相关文章

后端开发工程师转行大模型领域:全面学习路线指南,非常详细收藏我这一篇就够了

随着人工智能技术的迅猛发展&#xff0c;特别是大模型&#xff08;如GPT-3、BERT等&#xff09;在自然语言处理、计算机视觉等多个领域的广泛应用&#xff0c;越来越多的技术人员开始考虑转型至这一充满挑战与机遇的新领域。对于已经在后端开发领域积累了丰富经验的工程师来说&…

TFT-LCD支持RGB接口,设置颜色

TFT-lCD常用的接口,TTL(RGB)、LVDS、EDP、MIPI - TTL(RGB):TTL(晶体管-晶体管逻辑)是一种数字信号传输方式,常用于低速RGB视频信号传输。- LVDS:低电压差分信号(LVDS)是一种高速度、低功耗的串行数据传输技术,常用于显示器和通信设备之间。- eDP:嵌入式DisplayP…

Health Check

强大的自愈能力是Kubernetes这类容器编排引擎的一个重要特性&#xff0c;自愈的默认实现方式是自动重启发生故障的容器&#xff0c;除此之外&#xff0c;用户还可以利用Liveness和Readiness探测机制设置更精细的健康检查&#xff0c;进而实现如下需求&#xff1a; 零停机部署避…

第 15 章 查询优化的百科全书——EXPLAIN 详解

一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化后会生成一个所谓的执行计划&#xff0c;它展示了接下来具体执行查询的方式。 使用Explain语句来查看执行计划。 列名描述id在一个大的查询语句中每个 SELECT 关键字都对应一个唯一的 idselect_typeSELECT 关键…

新规2027年生效 美国禁止中国智能网联汽车软硬件

当地时间9月23日&#xff0c;美国商务部工业和安全局&#xff08;BIS&#xff09;发布了一项拟议规则制定通知&#xff08;NPRM&#xff09;&#xff0c;该通知将禁止销售或进口集成特定硬件和软件的联网车辆&#xff0c;或单独销售这些组件&#xff0c;这些硬件和软件与中国或…

Python 解析 html

一、场景分析 假设有如下 html 文档&#xff1a; 写一段 python 脚本&#xff0c;解析出里面的数据&#xff0c;包括经度维度。 <div classstorelist><ul><li lng"100.111111" lat"10.111111"><h4>联盟店1</h4><p>…

Kubernetes 深入浅出系列 | 容器剖析之容器基本实现原理

一、容器基本实现原理 Docker 主要通过如下三个方面来实现容器化&#xff1a; ① 使用操作系统的 namespace 隔离系统资源技术&#xff0c;通过隔离 网络、PID 进程、系统信号量、文件系统挂载、主机名和域名&#xff0c;来实现在同一宿主机系统中&#xff0c;运行不同的容器&…

yum库 docker的小白安装教程(附部分问题及其解决方案)

yum库 首先我们安装yum 首先在控制台执行下列语句 首先切换到root用户&#xff0c;假如已经是了就不用打下面的语句 su root #使用国内的镜像&#xff0c;不执行直接安装yum是国外的&#xff0c;那个有问题 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.al…

打印规律图形

思路:将主对角线的1,2,3,4看成一行,5,6,7看成一行,8,9看成一行,10看成一行。按照这种方法,遍历一遍,正好是1~10。 然后在遍历的过程中将这些数存放在数组中。 上图所示:1的坐标为(1,1),因为i=1,j=1时为1。因此: 对于第一行的数(i=1): 1的坐标为(1,1),对应放在…

低场核磁共振成像系统MRI的成像优势特点

低场核磁共振成像系统MRI的成像优势特点 精准医疗是未来医疗行业的发展趋势&#xff0c;而医疗技术的发展对于精准医疗的实现至关重要&#xff1b;低场MRI作为一种重要的医学影像技术&#xff0c;在精准医疗时代具有独特的优势。 一、定义与特点 低场MRI是指磁场强度低于高场M…

防爆对讲机国产化,走对自主可控的必由之路!

在“危、急、特”复杂多变的作业场景中&#xff0c;防爆对讲机作为关键通信工具&#xff0c;其技术自主可控与安全可靠性成为不容忽视的迫切需求。长期以来&#xff0c;核心技术依赖进口的现状成为制约行业发展的瓶颈&#xff0c;面临安全隐患与成本压力的困境&#xff0c;为打…

Unity开发绘画板——02.创建项目

1.创建Unity工程 我们创建一个名为 DrawingBoard 的工程&#xff0c;然后先把必要的工程目录都创建一下&#xff1a; 主要包含了一下几个文件夹&#xff1a; Scripts &#xff1a;存放我们的代码文件 Scenes &#xff1a;工程默认会创建的&#xff0c;存放场景文件 Shaders &…

(学习记录)使用HAL库 STM32CubeMX——GPIO引脚输入配置

STM32F103C8T6的GPIO引脚输入配置 时钟配置 &#xff08;学习记录&#xff09;使用 STM32CubeMX——配置时钟&#xff08;入门&#xff09;https://blog.csdn.net/Wang2869902214/article/details/142423522 GPIO 引脚输出配置 &#xff08;学习记录&#xff09;使用 STM32…

货代选择海运系统时要注意什么问题?

在全球贸易蓬勃发展的当下&#xff0c;货代企业在物流链条中起着举足轻重的作用。而一个优质的海运系统&#xff0c;则是货代企业提升竞争力、实现高效运营的关键利器。那么&#xff0c;货代企业在选择海运系统时&#xff0c;需要注意哪些问题呢&#xff1f; 一、避免过于关注价…

前端报错401 【已解决】

前端报错401 【已解决】 在前端开发中&#xff0c;HTTP状态码401&#xff08;Unauthorized&#xff09;是一个常见的错误&#xff0c;它表明用户试图访问受保护的资源&#xff0c;但未能提供有效的身份验证信息。这个错误不仅关乎用户体验&#xff0c;也直接关系到应用的安全性…

什么软件可以录屏?5个软件帮助你轻松进行录屏操作

什么软件可以录屏&#xff1f;5个软件帮助你轻松进行录屏操作 录屏软件是日常工作和学习中不可或缺的工具&#xff0c;广泛应用于制作教程、记录在线会议、游戏录制等场景。以下是五款功能强大且易于使用的录屏软件&#xff0c;能够帮助你轻松进行录屏操作。 迅捷屏幕录像工具…

从手动测试菜鸟,到自动化测试老司机,实现自动化落地

虽然许多伙伴是一个测试老人了&#xff0c;但是基本上所有的测试经验都停留在手工测试方面&#xff0c;对于自动化测试方面的实战经验少之又少。 其实&#xff0c;究其原因&#xff1a;一方面是&#xff0c;自动化方面不求上进&#xff0c;觉得会手工测试就可以了&#xff0c;自…

降准到底是什么?

王炸&#xff01;宣布10000亿利好&#xff01;跟我有啥关系&#xff1f; 刚刚宣布&#xff01;10000亿元降准 降准到底是什么&#xff1f;为何央行近年来持续在降准&#xff1f;银行是如何创造流通货币的&#xff1f;降准对股市、楼市、债市、汇市、普通老百姓意味着什么&#…

相亲交友网站为不同年龄层提供的服务差异

随着互联网技术的飞速发展&#xff0c;相亲交友网站已经成为现代人寻找伴侣的重要途径之一。无论是年轻人还是中老年人&#xff0c;都可以通过相亲交友网站找到自己的另一半。然而&#xff0c;不同年龄层的人在使用相亲交友网站时的需求和服务体验上存在显著差异。本文将探讨这…

深入解析SGD、Momentum与Nesterov:优化算法的对比与应用

目录 1. 梯度下降算法2. BGD、SGD、MBGD3. momentum与dampening3.1 另一种形式的momentum3.1.1 学习率固定3.1.2 学习率不固定 4. nesterov4.1 PyTorch中的Nesterov4.2 Polyak与Nesterov的比较 Ref 1. 梯度下降算法 先考虑一元情形。假设待更新的参数为 θ \theta θ&#xf…