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

2023-11-19

文章目录

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 中的模板语法及内置指令的常用场景。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue 3第三章:模板语法及指令介绍 的相关文章

随机推荐

  • 下载Freescale CodeWarrior 11.0解决Freescale CodeWarrior 代码限制(不需要license)

    一些NXP的项目需要软件Freescale CodeWarrior的最新版本10 7 但是新安装了软件之后 10 7版本的license只能使用一个月 一个月到期后 就会有代码大小的限制 这个时候 需要花钱购买license 费用几千块钱
  • android.accessibilityservice包介绍

    android accessibilityservice 英文原文 http developer android com reference android accessibilityservice package summary html
  • Ant Design Pro 修改主题设置

    Ant Design Pro 修改主题设置 主题是在项目根目录下的config defaultSettings js文件下内所定义的其中导出的Settings对象中即为默认的主题等配置 如下图 const Settings navTheme
  • Vue2项目使用高德地图

    目录 一 账号准备 1 注册账号 2 获取key 二 快速上手 1 安装 2 创建地图 3 点标记 4 海量点标记 5 简易行政区图 6 GeoJSON 三 绑定事件 总结 一 账号准备 1 注册账号 首先 注册开发者账号 成为高德开放平台
  • 高德地图加渐变色3D线段

    想用高德地图实现渐变色的边界效果 查看了很多资料 测试了很多方法 终于实现啦 记录一下 1 按照高德官方示例创建地图 var map new AMap Map container pitch 75 地图俯仰角度 有效范围 0 度 83 度
  • python基础练习--《人力资源管理员工管理》

    python新手入门练习 运用python的基础数据结构编写 人力资源管理员工管理 初学python 入门练习 留些记录 方便以后查看 如有错误 请诸位大神指点 谢谢 需求分析 要求使用python的最基础的数据结构 字典 元组 列表 字符
  • [系统安全] 四十六.恶意软件分析 (2)静态分析Capa经典工具批量提取静态特征和ATT&CK技战术

    终于忙完初稿 开心地写一篇博客 您可能之前看到过我写的类似文章 为什么还要重复撰写呢 只是想更好地帮助初学者了解病毒逆向分析和系统安全 更加成体系且不破坏之前的系列 因此 我重新开设了这个专栏 准备系统整理和深入学习系统安全 逆向分析和恶意
  • JS 实现一键复制(复制DIV)

    话不多说 直接上代码 JS部分 function copyDivContent divId 获取标签内容 const div document getElementById divId 创建文档区域 const range document
  • 计算机硬件系统结构主要分为什么五大组成,硬件系统的五大组成部分

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 以计算机为例 硬件系统的五大组成部分别为 储存器 控制器 运算器 输入设备 输出设备 计算机硬件 Computer hardware 是指计算机系统中由电子 机械和光电元件
  • 面试题流散汇总

    1 n位数全排列 大字符串相加 SQL HTTPS 根据简历来问 2 MapReduce和Spark的主要区别在于 MapReduce使用持久存储 而Spark使用弹性分布式数据集 RDDS Spark之所以如此快速 原因在于它在内存中处理
  • python爬取链家二手房信息并存储到数据库

    爬取链家的二手房信息 存储到数据库方便以后查看 文章目录 页面分析 引入库 方法编写 主函数编写 运行结果 页面分析 分析页面后发现是前后端未分离的状态 所以需要使用xpath分析界面元素 在li中存放着对应的div 有相关的信息 分析请求
  • Android 接入穿山甲SDK之开屏广告

    大家可以先参考我的上一篇博客介绍了如何集成SDK以及一些工具类传送门 首先创建一个脚本写入如下内容 package com unity3d player chuanshanjia import android app Activity im
  • RabbitMQ教程-重要参数&&API解释

    RabbitMQ的工作原理 下图是RabbitMQ的基本结构 生产者发送消息流程 1 生产者和Broker建立TCP连接 2 生产者和Broker建立通道 3 生产者通过通道消息发送给Broker 由Exchange将消息进行转发 4 Ex
  • MFC中如何将Menu资源添加到主对话框中

    还是写个博客备忘吧 自己这个脑子哦 在主对话框 Dlg cpp中 找到OnInitDialog 这个函数 在 TODO 在此添加额外的初始化代码 下面 添加这样的三行代码 TODO 在此添加额外的初始化代码 CMenu m Menu m M
  • 召唤神龙打造自己的ChatGPT

    在之前的两篇文章中 我介绍了GPT 1和2的模型 并分别用Tensorflow和Pytorch来实现了模型的训练 具体可以见以下文章链接 1 基于Tensorflow来重现GPT v1模型 gzroy的博客 CSDN博客 2 花费7元训练自
  • 硬件系统工程师宝典(30)-----降压式Buck电路分析

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到DC DC变换中的开关调节模式有功耗小 效率高并且稳压范围宽的特点以及DC DC的指标参数和设计要求 今天我们来分析一下DC DC中的一个典
  • Flutter flutter.minSdkVersion的实际文件位置

    Flutter 项目的Android相关版本号配置 flutter minSdkVersion 的版本号配置文件实际路径 flutter sdk packages flutter tools gradle src main groovy f
  • 总结:linux笔记-004

    一 Linux network详解 1 linux中网路相关的主要的几个配置文件 etc hosts 配置主机名 域名 和IP地址的对应 etc sysconfig network 配置主机名和网关 etc sysconfig networ
  • 【服务器基础资源巡检,含常用命令解析】

    在工作中经常去搜这些命令解析 于是整理了一下供大家参考 一 内存占用 二 磁盘占用 三 CPU占用 一 内存占用 使用free指令会显示内存的使用情况 包括实体内存 虚拟的交换文件内存 共享内存区段 以及系统核心使用的缓冲区等 参数如下 b
  • Vue 3第三章:模板语法及指令介绍

    文章目录 1 插值表达式 1 1 声明变量可直接在模板中使用 采用 变量名称 的方式 1 2 模板语法支持三元表达式 1 3 模板语法支持运算 1 4 模板语法支持方法调用 2 指令 2 1 v bind 用于绑定属性或动态绑定对象的值到元