Vue 3第三章:模板语法及指令介绍

news2024/11/26 2:23:34

文章目录

  • 1. 插值表达式
    • 1.1. 声明变量可直接在模板中使用,采用{{变量名称}}的方式
    • 1.2. 模板语法支持三元表达式
    • 1.3. 模板语法支持运算
    • 1.4. 模板语法支持方法调用
  • 2. 指令
    • 2.1. `v-bind`:`用于绑定属性或动态绑定对象的值到元素上`。
    • 2.2. `v-if`、`v-else-if`、`v-else` 和 `v-show`:`用于控制元素是否显示或隐藏`。
    • 2.3. `v-for`:`用于循环渲染数组或对象`。
    • 2.4. `v-model`:`用于在表单元素和组件中双向绑定数据`。
    • 2.5. `v-on`:`用于绑定事件监听器`。
    • 2.6. `v-html`:`用于渲染包含 HTML 代码的字符串`。
    • 2.7. `v-text`:`用于渲染纯文本内容`。
    • 2.8. `v-slot`:`用于在父组件中定义插槽,在子组件中使用插槽内容`。
    • 2.9. `v-pre`:`用于跳过指定元素及其子元素的编译过程`。
    • 2.10. `v-cloak`:`用于防止页面闪烁`。
    • 2.11. `v-once` :`让元素及其子元素只渲染一次`。该指令的作用是将元素的内容渲染为静态内容,即使后续数据发生了变化,也不会重新渲染该元素。
    • 2.12. `v-memo`:`大数据量场景下优化小部分性能`

1. 插值表达式

1.1. 声明变量可直接在模板中使用,采用{{变量名称}}的方式

<template>
  <div>{{ message }}</div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const message = ref("hello");
</script>

<style scoped></style>

1.2. 模板语法支持三元表达式

<template>
  <div>{{ message ? 1 : 0 }}</div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const message = ref(false);
</script>

<style scoped></style>

1.3. 模板语法支持运算

template>
  <div>{{ message + 1 }}</div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const message = ref(1);
</script>

<style scoped></style>

1.4. 模板语法支持方法调用

<template>
  <div>{{ getName() }}</div>
</template>

<script setup lang="ts">
const getName = () => {
  console.log('张三');
}
</script>

<style scoped></style>

2. 指令

在 Vue中,指令(Directive)是一种带有前缀 v- 的特殊属性,可以被绑定到普通的 HTML 元素上,用于改变元素的行为或样式

  • 常用的内置指令如下:
    在这里插入图片描述

2.1. v-bind用于绑定属性或动态绑定对象的值到元素上

<!-- 绑定普通属性 -->
<div v-bind:class="{'active': isActive}"></div>

<!-- 绑定组件属性 -->
<my-component v-bind:prop-name="value"></my-component>

在 Vue 3 中,可以使用缩写形式:替代 v-bind:。

<!-- v-bind 缩写 -->
<div :class="{'active': isActive}"></div>

2.2. v-ifv-else-ifv-elsev-show用于控制元素是否显示或隐藏

<!-- v-if 指令 -->
<div v-if="isNum === 0">Hello v-if!</div>

<!-- v-else-if 指令 -->
<div v-else-if="isNum === 1">Hello v-else-if!</div>

<!-- v-else 指令 -->
<div v-else>Hello v-else!</div>

<!-- v-show 指令 -->
<div v-show="isShow">Hello v-show!</div>

在 Vue 3 中,v-ifv-show 的行为和使用方法与 Vue 2 相同

2.3. v-for用于循环渲染数组或对象

<!-- 渲染数组 -->
<ul>
  <li v-for="(item, index) in items" :key="index">{{ item }}</li>
</ul>

<!-- 渲染对象 -->
<ul>
  <li v-for="(value, key) in object" :key="key">{{ key }}: {{ value }}</li>
</ul>

在 Vue 3 中,可以使用新的语法糖 v-for 来循环渲染整数区间

<!-- 循环渲染整数区间 -->
<div v-for="i in 10" :key="i">{{ i }}</div>


2.4. v-model用于在表单元素和组件中双向绑定数据

<!-- 绑定普通表单元素 -->
<input type="text" v-model="message">

<!-- 绑定自定义组件 -->
<my-component v-model="value"></my-component>

在 Vue 3 中,可以通过传递 modelValueupdate:modelValue 属性来自定义 v-model 在组件中的行为。

<!-- 自定义组件的 v-model -->
<my-component v-model:value="value"></my-component>

2.5. v-on用于绑定事件监听器

<!-- 绑定普通事件 -->
<button v-on:click="handleClick">Click me!</button>

<!-- 绑定修饰符 -->
<button v-on:keyup.enter="handleEnter">Press Enter!</button>

在 Vue 3 中,可以使用缩写形式 @ 替代 v-on:。

<!-- v-on 缩写 -->
<button @click="handleClick">Click me!</button>

2.6. v-html用于渲染包含 HTML 代码的字符串

<!-- 渲染包含 HTML 代码的字符串 -->
<div v-html="htmlCode"></div>

注意:使用 v-html 指令可以直接将字符串中的 HTML 代码渲染到页面中。但需要注意的是,由于可以注入恶意脚本导致安全问题,因此应该尽量避免直接使用 v-html 指令渲染未经信任的 HTML 代码。

2.7. v-text用于渲染纯文本内容

<!-- 渲染纯文本内容 -->
<div v-text="text"></div>

使用 v-text 指令可以将指定的文本内容渲染到页面中,与 {{}} 插值表达式相比,v-text 可以避免潜在的 XSS(跨站脚本攻击)攻击。

2.8. v-slot用于在父组件中定义插槽,在子组件中使用插槽内容

<!-- 父组件中定义插槽 -->
<template>
  <child-component>
    <template v-slot:header>
      <h2>这是标题</h2>
    </template>
    <template v-slot:default>
      <p>这是正文</p>
    </template>
  </child-component>
</template>

<!-- 子组件中使用插槽内容 -->
<template>
  <div>
    <slot name="header"></slot>
    <slot></slot>
  </div>
</template>

使用 v-slot 指令可以在父组件中定义插槽,然后在子组件中使用插槽内容。v-slot 指令还可以简化为 # 符号的缩写形式。

<!-- 使用 # 符号的缩写形式 -->
<template v-slot:header>
  <h2>这是标题</h2>
</template>

<template #header>
  <h2>这是标题</h2>
</template>

2.9. v-pre用于跳过指定元素及其子元素的编译过程

<!-- 跳过编译过程, 此处并不会将messag当成一个变量渲染出来,最终页面展示的是{{ meaage }} -->
<template>
  <div v-pre>{{ message }}</div> 
</template>

<script setup lang="ts">
import { ref } from 'vue';
let message = ref('hello')
</script>

<style scoped></style>

使用 v-pre 指令可以跳过指定元素及其子元素的编译过程,直接将指定内容渲染到页面中。该指令可用于优化大量静态内容的渲染性能

2.10. v-cloak用于防止页面闪烁

当使用直接在 DOM 中书写的模板时,可能会出现一种叫做“未编译模板闪现”的情况:用户可能先看到的是还没编译完成的双大括号标签,直到挂载的组件将它们替换为实际渲染的内容。

<!-- 防止页面闪烁 -->
<style>
  [v-cloak] {
    display: none;
  }
</style>

<div v-cloak>{{ message }}</div>

使用 v-cloak 指令会在 Vue 实例编译完毕前保持元素隐藏,等到 Vue 实例准备就绪后再移除该指令。本质是通过display: none; 和display: block;实现

2.11. v-once让元素及其子元素只渲染一次。该指令的作用是将元素的内容渲染为静态内容,即使后续数据发生了变化,也不会重新渲染该元素。

<!-- 只渲染一次 -->
<div v-once>{{ message }}</div>

使用 v-once 指令可以将指定元素及其子元素渲染为静态内容,即使后续数据发生了变化,也不会重新渲染该元素。该指令可用于优化大量静态内容的渲染性能
注意:由于使用 v-once 指令会将元素及其子元素渲染为静态内容,因此如果后续数据发生了变化,就无法更新该元素。因此,需要在使用 v-once 指令时慎重考虑。

2.12. v-memo大数据量场景下优化小部分性能

vue3.2新增指令,在组件和元素都可以使用,主要是可以缓存 期望的类型是个数组any[],该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么他的更新将会被跳过,甚至虚拟 DOM 的 vnode 创建也将被跳过,提升了性能。

官方文档关于v-memo的介绍

注意:v-memo 传入空依赖数组 (v-memo=“[]”) 将与 v-once 效果相同

  • 与 v-for 一起使用
  • v-memo 仅用于性能至上场景中的微小优化,应该很少需要。最常见的情况可能是有助于渲染海量 v-for 列表 (长度超过 1000 的情况)

总结:本篇文章主要介绍了vue 3 中的模板语法及内置指令的常用场景。

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

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

相关文章

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难&#xff0c;努力地进行深度钻研&#xff0c;生产内容&#xff1b;而大多数信息受众始终在享受轻度学习&#xff0c;消费内容。如果我们真的希望在时代潮流中占据一席之地&#xff0c;那就应该尽早抛弃轻松学习的幻想&#xff0c;锤炼深度学习…

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集&#xff0c;与站点各资源包发出和相应包的记录 Proxy模块是核心模块&#xff0c;可以拦截数据包发送往浏览器&#xff0c;进行修改后再…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下&#xff1a;&#xff08;1&#xff09;45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67&#xff08;2&#xff09;45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67分析并判断这两个IP包是不是同一个数据报的分片&a…

Android JetPack之启动优化StartUp初始化组件的详解和使用

一、背景 先看一下Android系统架构图 在Android设备中&#xff0c;设备先通电&#xff08;PowerManager&#xff09;&#xff0c;然后加载内核层&#xff0c;内核走完&#xff0c;开始检查硬件&#xff0c;以及为硬件提供的公开接口&#xff0c;然后进入到库的加载。库挂载后开…

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…

【Java】Spring Boot 配置文件

文章目录SpringBoot 配置文件1. 配置文件的作用2. 配置文件的格式3. properties配置文件说明3.1 properties基本语法3.2 读取配置文件3.3 properties缺点分析4. yml配置文件说明4.1 yml基本语法4.2 yml使用进阶4.2.1 yml配置不同的数据类型及null4.2.1 yml配置的读取4.2.2 配置…

Python蓝桥杯训练:基本数据结构 [哈希表]

Python蓝桥杯训练&#xff1a;基本数据结构 [哈希表] 文章目录Python蓝桥杯训练&#xff1a;基本数据结构 [哈希表]一、哈希表理论基础知识1、开放寻址法2、链式法二、有关哈希表的一些常见操作三、力扣上面一些有关哈希表的题目练习1、[有效的字母异位词](https://leetcode.cn…

0101基础概念-图-数据结构和算法(Java)

文章目录1 图1.1 定义1.2 4种图模型2 无向图2.1 定义2.2 术语后记1 图 1.1 定义 图是一种非线性的数据结构&#xff0c;表示多对多的关系。 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G(V, E)&#xf…

ecology9-谷歌浏览器下-pdf.js在渲染时部分发票丢失文字 问题定位及解决

问题 问题描述 &#xff1a; 在谷歌浏览器下&#xff0c;pdf.js在渲染时部分发票丢失文字&#xff1b;360浏览器兼容模式不存在此问题 排查思路&#xff1a;1、对比谷歌浏览器的css样式和360浏览器兼容模式下的样式&#xff0c;没有发现关键差别 2、✔使用Fiddler修改网页js D…

什么是线程死锁?如何解决死锁问题

死锁&#xff0c;一组互相竞争的资源的线程之间相互等待&#xff0c;导致永久阻塞的现象。 如下图所示&#xff1a; 与死锁对应的&#xff0c;还有活锁&#xff0c;是指线程没有出现阻塞&#xff0c;但是无限循环。 有一个经典的银行转账例子如下&#xff1a; 我们有个账户类…

操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以免造成看不懂的情况&#xff01;&#xff01; 基于白名单AutoElevate绕过…

2-MATLAB APP Design-下拉菜单栏的使用

一、APP 界面设计展示 1.新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、下拉菜单栏、坐标区,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:下拉菜单栏的使用,调整背景颜色,字体的颜色为黑色,字体的大小调为26. 2.在左侧组件库常用栏…

Qt音视频开发17-vlc内核回调拿图片进行绘制

一、前言 在众多播放器中&#xff0c;支持的种类格式众多&#xff0c;并支持DVD影音光盘&#xff0c;VCD影音光盘及各类流式协议&#xff0c;提供了sdk进行开发&#xff0c;这点是至关重要的&#xff0c;尽管很多优秀的播放器很牛逼&#xff0c;由于没有提供sdk第三方开发&…

【网络编程套接字(一)】

网络编程套接字&#xff08;一&#xff09;理解源IP地址和目的IP地址理解源MAC地址和目的MAC地址理解源端口号和目的端口号PORT VS PID认识TCP协议和UDP协议网络字节序socket编程接口socket常见APIsockaddr结构简单的UDP网络程序服务端创建套接字服务端绑定字符串IP VS 整数IP客…

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说&#xff0c;更快更安全&#xff0c;跨域也不再是问题&#xff0c;更关键的是更加优雅 &#xff0c;所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token&#xff0c;如果在项目中通过 jjwt 来支持 J…

Springboot整合 Thymeleaf增删改查一篇就够了

很早之前写过Thymeleaf的文章&#xff0c;所以重新温习一下&#xff0c;非前后端分离&#xff0c;仅仅只是学习 官网&#xff1a; https://www.thymeleaf.org/ SpringBoot可以快速生成Spring应用&#xff0c;简化配置&#xff0c;自动装配&#xff0c;开箱即用。 JavaConfigur…

【java基础】枚举类(enum)

文章目录基本介绍快速使用字段、方法、构造器枚举类方法toString方法valueOf方法values方法ordinal方法基本介绍 在java中有一种特殊的类型就是枚举类&#xff0c;对于一个有限的有固定值的集合&#xff0c;我们就可以考虑使用枚举类来进行表示&#xff0c;例如服装的大小为 小…

linux shell 入门学习笔记15 shell 条件测试

概念 shell的条件测试目的是得出真和假。 shell 提供的条件测试语法 test 命令 [] 中括号命令 语法*&#xff1a; test条件测试 test命令用来评估一个表达式&#xff0c;他的结果是真&#xff0c;还是假&#xff0c;如果条件为真&#xff0c;那么命令执行状态结果就为0&…

【蓝桥杯集训·周赛】AcWing 第92场周赛

文章目录第一题 AcWing 4864. 多边形一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4865. 有效类型一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4866. 最大数量一、题目1、原…

Spring之丐版IOC实现

文章目录IOC控制反转依赖注入Bean的自动装配方式丐版IOC实现BeanDefinition.javaResourceLoader.javaBeanRegister.javaBean和DI的注解BeanFactory.javaApplicationContext测试&#xff0c;实现在这里插入图片描述大家好&#xff0c;我是Leo。Spring核心中依赖注入和IOC容器是非…