Vue.js 模板语法详解:插值表达式与指令使用指南

Vue.js 模板语法详解:插值表达式与指令使用指南

在这里插入图片描述

引言

简要介绍主题
Vue.js 是一个现代化的 JavaScript 框架,用于构建用户界面。Vue 的模板语法提供了直观且功能强大的工具,用于将数据与 DOM 绑定。本文将深入探讨 Vue.js 的两个核心知识点:插值表达式和指令,帮助读者掌握 Vue 的模板语法。

目标和预期收获
读者将学习如何使用 Vue.js 的插值表达式和各种指令来动态地控制和渲染 DOM 元素。通过对 Vue 2 和 Vue 3 的比较,读者能够了解各版本的差异,并应用这些知识于实际项目中。

文章目录

    • Vue.js 模板语法详解:插值表达式与指令使用指南
      • 引言
      • 主要内容
        • 1. 插值表达式
        • 2. 指令
      • 深入探讨
      • 实际应用
        • 案例研究:构建一个简单的用户界面
      • 总结
      • 参考资料

主要内容

1. 插值表达式

什么是插值表达式
插值表达式是 Vue.js 模板语法的基础,它允许开发者在模板中嵌入 JavaScript 表达式,动态地显示数据。

基本用法
插值表达式使用双大括号 {{ }} 包裹变量或表达式,将其插入到 HTML 中。

代码示例(Vue 2 和 Vue 3):

<div id="app"><p>{{ message }}</p><p>{{ number + 1 }}</p>
</div><script>
export default {name: 'app',data: {message: 'Hello, Vue.js!',number: 42}
};
</script>
<template><div><p>{{ message }}</p><p>{{ number + 1 }}</p></div>
</template><script setup>
import { ref } from 'vue';const message = ref('Hello, Vue.js!');
const number = ref(42);
</script>

解释
在这个例子中,{{ message }}{{ number + 1 }}messagenumber 的值插入到 HTML 中。当这些数据发生变化时,页面上的内容也会自动更新。

复杂表达式
插值表达式也可以用于更复杂的计算和方法调用。例如,调用一个方法来格式化日期:

代码示例(Vue 2 和 Vue 3):

<div id="app"><p>{{ formatDate(date) }}</p>
</div><script>
export default {name: 'app',data: {date: new Date()},methods: {formatDate(date) {return date.toLocaleDateString();}}
};
</script>
<template><div><p>{{ formatDate(date) }}</p></div>
</template><script setup>
import { ref } from 'vue';const date = ref(new Date());function formatDate(date) {return date.toLocaleDateString();
}
</script>

解释
通过在插值表达式中调用 formatDate 方法,我们可以将日期格式化为本地日期字符串。这种方式使得模板更加动态和灵活。

2. 指令

Vue.js 指令是 Vue 模板语法的核心部分,提供了丰富的功能来控制 DOM 的行为。以下是 Vue.js 常用的指令,包括 Vue 2 和 Vue 3 的使用方法及其区别:

v-bind:绑定属性
v-model:双向数据绑定
v-if、v-else-if、v-else:条件渲染
v-for:循环渲染
v-on:事件处理
v-show:显示/隐藏
v-pre:跳过这个元素和它的子元素的编译
v-cloak:保留元素直到 Vue 实例准备好
v-once:仅渲染元素一次

v-bind

代码示例(Vue 2 和 Vue 3):

<div id="app"><img v-bind:src="imageSrc" alt="Vue Logo">
</div><script>
export default {name: 'app',data: {imageSrc: 'https://vuejs.org/images/logo.png'}
};
</script>
<template><div><img :src="imageSrc" alt="Vue Logo"></div>
</template><script setup>
import { ref } from 'vue';const imageSrc = ref('https://vuejs.org/images/logo.png');
</script>

解释
v-bind 指令用于绑定 HTML 属性。在 Vue 3 中,简写为 :

v-model

代码示例(Vue 2 和 Vue 3):

<div id="app"><input v-model="message" placeholder="Type something"><p>Message: {{ message }}</p>
</div><script>
export default {name: 'app',data: {message: ''}
};
</script>
<template><div><input v-model="message" placeholder="Type something"><p>Message: {{ message }}</p></div>
</template><script setup>
import { ref } from 'vue';const message = ref('');
</script>

解释
v-model 实现双向数据绑定。Vue 3 的写法与 Vue 2 相同。

v-if、v-else-if、v-else

代码示例(Vue 2 和 Vue 3):

<div id="app"><p v-if="isVisible">This is visible</p><p v-else>This is hidden</p>
</div><script>
export default {name: 'app',data: {isVisible: true}
};
</script>
<template><div><p v-if="isVisible">This is visible</p><p v-else>This is hidden</p></div>
</template><script setup>
import { ref } from 'vue';const isVisible = ref(true);
</script>

解释
v-if 根据条件渲染元素。Vue 3 中的使用方式与 Vue 2 相同。

v-for

代码示例(Vue 2 和 Vue 3):

<div id="app"><ul><li v-for="(item, index) in items" :key="index">{{ item.text }}</li></ul>
</div><script>
export default {name: 'app',data: {items: [{ text: 'Learn Vue.js' },{ text: 'Build something awesome' }]}
};
</script>
<template><ul><li v-for="(item, index) in items" :key="index">{{ item.text }}</li></ul>
</template><script setup>
import { ref } from 'vue';const items = ref([{ text: 'Learn Vue.js' },{ text: 'Build something awesome' }
]);
</script>

解释
v-for 用于循环渲染列表。Vue 3 中使用方式与 Vue 2 相同,但推荐使用 :key 属性来提高性能。

v-on

代码示例(Vue 2 和 Vue 3):

<div id="app"><button v-on:click="showMessage">Click Me</button>
</div><script>
export default {name: 'app',methods: {showMessage() {alert('Hello, Vue.js!');}}
};
</script>
<template><button @click="showMessage">Click Me</button>
</template><script setup>
function showMessage() {alert('Hello, Vue.js!');
}
</script>

解释
v-on 用于绑定事件处理函数。Vue 3 的简写为 @click

v-show

代码示例(Vue 2 和 Vue 3):

<div id="app"><p v-show="isVisible">This is visible</p>
</div><script>
export default {name: 'app',data: {isVisible: true}
};
</script>
<template><p v-show="isVisible">This is visible</p>
</template><script setup>
import { ref } from 'vue';const isVisible = ref(true);
</script>

解释
v-show 控制元素的显示和隐藏,与 v-if 的区别在于 v-show 始终渲染元素,但通过 CSS 控制其显示状态。

v-pre

代码示例(Vue 2 和 Vue 3):

<div id="app"><p v-pre>{{ rawText }}</p>
</div><script>
export default {name: 'app',data: {rawText: 'This will not be compiled'}
};
</script>
<template><p v-pre>{{ rawText }}</p>
</template><script setup>
import { ref } from 'vue';const rawText = ref('This will not be compiled');
</script>

解释
v-pre 用于跳过这个元素及其子元素的编译,直接显示原始文本。

v-cloak

代码示例(Vue 2 和 Vue 3):

<div id="app" v-cloak><p>{{ message }}</p>
</div><script>
export default {name: 'app',data: {message: 'This is a message'}
};
</script><style>
[v-cloak] {display: none;
}
</style>
<template><div v-cloak><p>{{ message }}</p></div>
</template><script setup>
import { ref } from 'vue';const message = ref('This is a message');
</script><style>
[v-cloak] {display: none;
}
</style>

解释
v-cloak 用于防止 Vue 实例编译完成前页面的闪烁。编译完成后,v-cloak 会被自动移除。

v-once

代码示例(Vue 2 和 Vue 3):

<div id="app"><p v-once>{{ message }}</p>
</div><script>
export default {name: 'app',data: {message: 'This will only render once'}
};
</script>
<template><p v-once>{{ message }}</p>
</template><script setup>
import { ref } from 'vue';const message = ref('This will only render once');
</script>

解释
v-once 指令仅渲染元素一次,之后不再更新。这对于性能优化特别有用。


深入探讨

插值表达式的应用

  • 动态内容:可以在模板中动态地插入计算结果或方法调用的返回值,提高模板的灵活性和动态性。
  • 复杂计算:虽然插值表达式可以处理复杂的计算,但推荐将复杂逻辑放在计算属性或方法中,以保持模板的简洁性。

指令的应用与最佳实践

  • v-bind:推荐为动态绑定属性使用 v-bind,并利用简写 : 提高代码的可读性。
  • v-model:在表单控件中使用 v-model 实现双向数据绑定,确保数据的实时更新。
  • v-if 和 v-show:选择使用 v-ifv-show 时应考虑性能和使用场景。v-if 更适合条件较少变化的场景,而 v-show 更适合频繁切换的场景。
  • v-for:在使用 v-for 时,始终使用唯一的 key,以便 Vue 更高效地更新 DOM。

Vue 2 和 Vue 3 的区别

  • Vue 3 引入了更简洁的语法:例如,v-on 的简写 @v-bind 的简写 :
  • Vue 3 的 Composition API:允许在 <script setup> 中使用更简洁的语法来定义数据和方法,避免了 Vue 2 中的 datamethods 等选项的冗长写法。
  • 性能优化:Vue 3 对虚拟 DOM 和响应式系统进行了优化,使得性能比 Vue 2 更高效。

实际应用

案例研究:构建一个简单的用户界面

代码实现(Vue 2):

<div id="app"><h1>{{ title }}</h1><input v-model="search" placeholder="Search"><ul><li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li></ul><p v-if="filteredItems.length === 0">No items found</p>
</div><script>
export default {name: 'app',data: {title: 'User List',search: '',items: [{ id: 1, name: 'John Doe' },{ id: 2, name: 'Jane Smith' },{ id: 3, name: 'Jack Johnson' }]},computed: {filteredItems() {return this.items.filter(item => item.name.toLowerCase().includes(this.search.toLowerCase()));}}
};
</script>

代码实现(Vue 3 - setup 语法糖):

<template><div><h1>{{ title }}</h1><input v-model="search" placeholder="Search"><ul><li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li></ul><p v-if="filteredItems.length === 0">No items found</p></div>
</template><script setup>
import { ref, computed } from 'vue';const title = ref('User List');
const search = ref('');
const items = ref([{ id: 1, name: 'John Doe' },{ id: 2, name: 'Jane Smith' },{ id: 3, name: 'Jack Johnson' }
]);const filteredItems = computed(() => {return items.value.filter(item => item.name.toLowerCase().includes(search.value.toLowerCase()));
});
</script>

解释
在这个例子中,我们使用了 v-model 实现双向数据绑定,v-for 循环渲染用户列表,v-if 用于条件渲染。当用户输入搜索关键词时,filteredItems 计算属性会动态更新显示的用户列表。


总结

回顾主要内容
本文详细介绍了 Vue.js 模板语法中的插值表达式和各种指令,涵盖了 Vue 2 和 Vue 3 的使用方法及其区别。通过具体的代码示例和案例研究,帮助初学者掌握这些基础知识。

重申目标
希望读者能够理解并熟练使用 Vue.js 的模板语法,为构建动态、交互性强的前端界面奠定坚实的基础。

未来展望
在掌握模板语法后,建议读者深入学习 Vue 的组件化开发和 Vuex 状态管理,以进一步提升前端开发技能和应用复杂的业务逻辑。


参考资料

  • Vue.js 官方文档 - 模板语法
  • MDN Web Docs - JavaScript Guide

看到这里的小伙伴,欢迎 点赞👍评论📝收藏🌟

希望这篇关于 Vue.js 模板语法的文章对你有所帮助。如果有其他需要调整或补充的地方,请告诉我!

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

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

相关文章

Training language models to follow instructionswith human feedback

Abstract 将语言模型做得更大并不会自动提高它们遵循用户意图的能力。例如&#xff0c;大型语言模型可能会生成不真实、有毒或对用户不有帮助的输出。换句话说&#xff0c;这些模型并未与用户对齐&#xff08;aligned&#xff09;。本文展示了一种通过人类反馈来对齐语言模型与…

2024实战指南:四款全免费的数据恢复工具盘点!

在这个数字化的时代里&#xff0c;数据的安全至关重要。如果一不小心删除或丢失了重要数据应该怎么办呢&#xff1f;这几个全免费的数据恢复工具可以帮你解决问题&#xff0c;亲测好用哦&#xff01; 第一款&#xff1a;福昕数据恢复 直达链接&#xff1a;www.pdf365.cn/foxi…

【并发编程】从AQS机制到同步工具类

AQS机制 Java 中常用的锁主要有两类&#xff0c;一种是 Synchronized 修饰的锁&#xff0c;被称为 Java 内置锁或监视器锁。另一种就是在 JUC 包中的各类同步器&#xff0c;包括 ReentrantLock&#xff08;可重入锁&#xff09;、Semaphore&#xff08;信号量&#xff09;、Co…

Android13 Launcher3 客制化Workspace页面指示器

需求&#xff1a;原生态的workspace页面指示器是个长条&#xff0c;不大好看&#xff0c;需要进行客制化 实现效果如图&#xff1a; 实现原理&#xff1a; 代码实现在WorkspacePageIndicator.java 布局在launcher.xml里 实现在WorkspacePageIndicator.java通过重写onDraw函数…

顺序循环队列

顺序循环队列 队头插入元素&#xff0c;队尾删除元素 本来应该判空和判断是否存满的条件都是&#xff1a;队头 队尾&#xff0c;但这样就没办法区分了&#xff0c;所以&#xff0c;就牺牲一个空间&#xff08;比如长度为10&#xff0c;但只能存9个&#xff09;&#xff0c;这…

auto的使用场景

auto的两面性 合理使用auto 不仅可以减少代码量, 也会大大提高代码的可读性. 但是事情总有它的两面性 如果滥用auto, 则会让代码失去可读性 推荐写法 这里推荐两种情况下使用auto 一眼就能看出声明变量的初始化类型的时候 比如迭代器的循环, 用例如下 #include <iostre…

利用autoDecoder工具在数据包加密+签名验证站点流畅测试

站点是个靶场 https://github.com/0ctDay/encrypt-decrypt-vuls 演示地址http://39.98.108.20:8085/ 不是仅登录位置暴力破解的那种场景&#xff0c;使用autoDecoder&#xff08;https://github.com/f0ng/autoDecoder&#xff09;的好处就是每个请求自动加解密&#xff0c;测…

关于ThinkPHP 5 框架开启自动搜索控制器 无法访问的问题坑

假如当前有一个登陆接口功能 因为后续会有不同版本的 登陆接口 这时候 我们可以在控制器中 新建文件夹 做区分 方便管理即 新建了一个 api 模块 文件路径是 api/controller/V1/Login 正常情况下 controller 目录下 是 控制器文件 login.php 文件&#xff0c;由于我们有多个…

Qt text-align和padding属性

1. text-align属性是用来设置文本的水平对齐方式。 text-align: center 文本将居中显示text-align: left 文本将左对齐显示text-align: right 文本将右对齐显示 2. 内边距padding: 内边距是元素内容与其边框之间的空间 padding-left: 10px; 距离内左边距10个像素点padding-r…

时序预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 WTCtransformer时间序列组合预测模型 WTC,transformer 创新点&#xff0c;超级新。先发先得&#xff0c;高精度代码。 预测主模型transformer也可以改其他WTC-former系列&#xff0c;比如WTC-informer/autoformer等等…

LLaMA Factory微调Llama3模型

LLaMA Factory是一款开源低代码大模型微调框架&#xff0c;集成了业界最广泛使用的微调技术&#xff0c;支持通过Web UI界面零代码微调大模型&#xff0c;目前已经成为开源社区内最受欢迎的微调框架。 &#x1f4a5;GPU推荐使用24GB显存的A10&#xff08;ecs.gn7i-c8g1.2xlarg…

论文泛读: DETRs Beat YOLOs on Real-time Object Detection

[toc[ DETRs Beat YOLOs on Real-time Object Detection 论文地址: https://openaccess.thecvf.com/content/CVPR2024/html/Zhao_DETRs_Beat_YOLOs_on_Real-time_Object_Detection_CVPR_2024_paper.html 代码地址: https://zhao-yian.github.io/RTDETR 动机 现状 YOLO系列因…

ubuntu设置为自己需要的屏幕分辨率

先说一下我处理该问题的大体背景&#xff1a;我是学习Linux的新手&#xff0c;刚学完嵌入式Linux驱动开发相关课程。现在想接着学习一下QT开发。我是在电脑上装了虚拟机之后安装的ubuntu系统。因为换了电脑&#xff0c;所以重新装了ubuntu系统。但是&#xff0c;装完ubuntu系统…

SELF-INSTRUCT: Aligning Language Modelswith Self-Generated Instructions 学习

指令微调就是要训练模型执行用户的要求的能力。 文章首先说“指令微调”数据集经常是人工生成&#xff0c;有数量少等缺点。文章提供了一个让语言模型自己生成指令微调数据&#xff0c;自己学习的方法。首先会让一个语言模型自己生成要求&#xff0c;输入和输出&#xff0c;然…

【JS】使用MessageChannel实现深度克隆

前言 通常使用简便快捷的JSON 序列化与反序列化实现深克隆&#xff0c;也可以递归实现或者直接使用lodash。 但 JSON 序列化与反序列化 无法处理如下的循环引用&#xff1a; 实现 MessageChannel 内部使用了浏览器内置的结构化克隆算法&#xff0c;该算法可以在不同的浏览器上…

redis集群部署

因为Redis是c开发的,因此安装redis需要c语言的编译环境,即先需要安装gcc. 1.解压包 [rootredis01 Redis]# tar -zvxf redis-3.2.9.tar.gz 查看是否存在Makefile文件,存在则直接make编译redis源码 2.编译文件 [rootredis01 redis-3.2.9]# make 安装编译好的文件 [rootredi…

上传拍摄素材和后期剪辑素材太慢?镭速助力企业加速大文件传输

随着时光的流逝&#xff0c;当代人对视觉体验的要求越来越高&#xff0c;每一帧画面都追求极致的清晰度与细腻感。这无疑为影视制作带来了机遇&#xff0c;同时也带来了挑战。高清4K、8K视频等大文件的传输需求日益增长&#xff0c;传统的FTP、HTTP等数据传输方式已难以满足行业…

华硕天选Air:开学季的性价比之巅

正值开学季&#xff0c;华硕天选Air全能本以8999元的首发价回归&#xff0c;为学生和需求高性能笔记本的用户带来了超值的选择。 这款笔记本以其轻薄设计和强悍性能&#xff0c;成为市场上的热点。 轻薄设计&#xff0c;潮流先锋 华硕天选Air 2024采用了全新模具设计&#xf…

零基础学习Python(七)

1. 字符串常用方法 lower()、upper()&#xff1a;转换为小写字符串、大写字符串 split(str)&#xff1a;按照指定字符串str进行分割&#xff0c;结果为列表&#xff1a; email "123qq.com" print(email.split("")) [123, qq.com] count(str)&#xf…

python12 中,No module named‘distutils‘错误

python12跑redis的时候&#xff0c;突然发现报错“ No module nameddistutils ” distutils在python标准库从2012年就开始断更了&#xff0c;python12中已经移除该库&#xff0c;可以安装以下库进行解决。 pip install setuptools --upgrade “setuptools”是一个处理Python软…