从零基础到最佳实践:Vue.js 系列(2/10):《模板语法与数据绑定》
Vue.js 模板语法与数据绑定:从基础到实践
- 关键点
- Vue.js 的模板语法使用 HTML 结合特殊指令(如
v-bind
、v-on
),实现动态界面。 - 插值(
{{ }}
)显示数据,指令控制 DOM 行为,双向绑定简化表单交互。 - 条件渲染(
v-if
/v-show
)和列表渲染(v-for
)是构建动态 UI 的核心工具。 - 截至 2025 年 5 月,Vue 3 的 Composition API 和
defineModel()
增强了开发体验。
- Vue.js 的模板语法使用 HTML 结合特殊指令(如
什么是模板语法?
Vue.js 的模板语法基于 HTML,允许开发者通过简单的语法将数据绑定到界面。使用双大括号 {{ }}
显示数据,指令(如 v-bind
)动态更新 DOM 属性,事件处理(v-on
)响应用户操作。
数据绑定如何工作?
数据绑定让界面与数据保持同步。v-model
实现双向绑定,适合表单输入;v-if
和 v-for
分别控制条件显示和列表渲染。这些功能让开发者无需手动操作 DOM。
实际应用
这些技术可用于搜索框、动态列表、切换显示等场景。例如,显示用户列表或实时更新输入内容。
下一步
通过本文,你将学会使用 Vue.js 的模板语法和数据绑定,构建交互式界面。后续文章将深入探讨组件开发。
欢迎继续我们的 Vue.js 学习之旅!在上一篇文章中,我们搭建了开发环境并了解了 Vue.js 的 MVVM 模式和响应式原理。本文是系列的第二篇,将聚焦于 模板语法与数据绑定,这是 Vue.js 构建动态用户界面的核心。通过插值、指令、事件处理、条件渲染、列表渲染和双向绑定,你将学会如何让界面随数据变化而更新。我们将以轻松、易懂的语言,结合详细的代码示例和实际应用场景,带你从零基础迈向熟练开发者。基于 2025 年 5 月的 Vue 3(版本 3.5.13),本文使用 Composition API 和最新特性(如 defineModel()
)。
1. 模板语法简介
Vue.js 的模板语法基于标准 HTML,结合特殊的指令和插值语法,让开发者可以声明式地将数据绑定到 DOM。模板会被编译为高效的 JavaScript 代码,与 Vue 的响应式系统结合,实现数据变化时自动更新界面。
核心特性:
- 插值:使用
{{ }}
显示数据。 - 指令:以
v-
开头的属性,如v-bind
、v-on
,控制 DOM 行为。 - 响应式:数据变化触发视图更新,无需手动操作 DOM。
2. 插值(Interpolation)
插值是 Vue.js 中最简单的数据绑定方式,用于在模板中显示文本内容。最常用的方法是 Mustache 语法(双大括号 {{ }}
)。
<template><div><p>欢迎,{{ userName }}!</p><button @click="changeName">更改名字</button></div>
</template><script setup>
import { ref } from 'vue';const userName = ref('张伟');function changeName() {userName.value = '李娜';
}
</script>
说明:
{{ userName }}
显示userName
的值(初始为“张伟”)。- 点击按钮调用
changeName
,更新userName
,界面自动显示“李娜”。 - 插值适用于文本内容,不能用于 HTML 属性(需用
v-bind
)。
实际应用:
- 显示用户个人信息,如用户名或欢迎消息。
- 动态更新通知或状态文本。
注意:
- 插值内容会被转义,防止 XSS 攻击。若需渲染 HTML,使用
v-html
(仅限可信内容)。
3. 指令(Directives)
指令是 Vue.js 模板中的特殊属性,以 v-
开头,用于动态控制 DOM 行为。常见指令包括:
v-bind
:绑定 HTML 属性。v-on
:监听事件。v-if
/v-show
:条件渲染。v-for
:列表渲染。v-model
:双向绑定。
示例(绑定属性):
<template><div><img :src="imageUrl" alt="风景"><p :class="{ active: isActive }">动态样式</p></div>
</template><script setup>
import { ref } from 'vue';const imageUrl = ref('https://example.com/image.jpg');
const isActive = ref(true);
</script><style scoped>
.active {color: blue;
}
</style>
说明:
:src="imageUrl"
是v-bind:src
的简写,动态绑定图片 URL。:class="{ active: isActive }"
根据isActive
动态应用 CSS 类。- 指令支持动态参数,如
:attr="value"
。
实际应用:
- 动态设置图片、链接或样式。
- 根据用户状态切换 UI 元素。
4. 事件处理(v-on)
v-on
指令用于监听 DOM 事件,如点击、输入或鼠标移动。它的简写是 @
。
示例:
<template><div><p>点击次数:{{ count }}</p><button @click="increment">点击我</button></div>
</template><script setup>
import { ref } from 'vue';const count = ref(0);function increment() {count.value++;
}
</script>
说明:
@click="increment"
绑定点击事件,调用increment
函数。- 每次点击,
count
增加,界面自动更新。
动态事件:
支持动态事件名,如 @[eventName]="handler"
,适用于根据条件切换事件类型。
实际应用:
- 实现按钮点击计数器。
- 触发表单提交或导航。
5. 条件渲染(v-if / v-show)
条件渲染控制元素是否显示,Vue.js 提供 v-if
和 v-show
两种方式:
- v-if:根据条件添加或移除 DOM 元素,适合不频繁切换的场景。
- v-show:通过 CSS
display
属性切换显示,适合频繁切换的场景。
示例:
<template><div><p v-if="isLoggedIn">欢迎回来!</p><p v-else>请登录</p><p v-show="showDetails">详细信息</p><button @click="toggleLogin">切换登录状态</button><button @click="toggleDetails">切换详细信息</button></div>
</template><script setup>
import { ref } from 'vue';const isLoggedIn = ref(false);
const showDetails = ref(true);function toggleLogin() {isLoggedIn.value = !isLoggedIn.value;
}function toggleDetails() {showDetails.value = !showDetails.value;
}
</script>
说明:
v-if="isLoggedIn"
根据isLoggedIn
显示不同内容。v-show="showDetails"
切换display
属性,元素始终存在于 DOM。
实际应用:
- 显示登录/未登录状态。
- 切换详细信息面板。
v-if vs v-show:
特性 | v-if | v-show |
---|---|---|
渲染方式 | 添加/移除 DOM 元素 | 切换 CSS display 属性 |
性能 | 初始渲染慢,切换开销大 | 初始渲染快,切换开销小 |
适用场景 | 不频繁切换 | 频繁切换 |
6. 列表渲染(v-for)
v-for
指令用于基于数组或对象渲染列表,是构建动态 UI 的核心工具。
示例(数组渲染):
<template><ul><li v-for="item in items" :key="item.id">{{ item.name }}</li></ul>
</template><script setup>
import { ref } from 'vue';const items = ref([{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '樱桃' }
]);
</script>
说明:
v-for="item in items"
遍历items
数组,item
是每个元素的别名。:key="item.id"
提供唯一标识,帮助 Vue 优化渲染。
对象渲染:
<template><ul><li v-for="(value, key, index) in user" :key="index">{{ index }}. {{ key }}: {{ value }}</li></ul>
</template><script setup>
import { reactive } from 'vue';const user = reactive({name: '张伟',age: 30,city: '上海'
});
</script>
说明:
v-for="(value, key, index) in user"
遍历对象属性,value
是值,key
是属性名,index
是索引。- 顺序基于
Object.keys()
,可能因 JavaScript 引擎而异。
实际应用:
- 显示商品列表或用户表格。
- 渲染嵌套菜单或树形结构。
注意:
- 始终提供
:key
,优先使用唯一 ID,避免使用索引。 - 不要在同一元素上同时使用
v-if
和v-for
,优先级为v-if > v-for
。
7. 双向绑定(v-model)
v-model
提供双向数据绑定,适合表单输入场景,自动同步输入值和数据。
示例(表单输入):
<template><div><input v-model="searchText" placeholder="输入搜索内容"><p>搜索内容:{{ searchText }}</p></div>
</template><script setup>
import { ref } from 'vue';const searchText = ref('');
</script>
说明:
v-model="searchText"
将输入框的值与searchText
绑定。- 用户输入会更新
searchText
,反之亦然。
组件双向绑定(Vue 3.4+):
<template><input v-model="model" placeholder="自定义输入">
</template><script setup>
import { defineModel } from 'vue';const model = defineModel();
</script>
<template><div><CustomInput v-model="inputValue" /><p>输入值:{{ inputValue }}</p></div>
</template><script setup>
import { ref } from 'vue';
import CustomInput from './CustomInput.vue';const inputValue = ref('Hello');
</script>
说明:
defineModel()
创建一个 ref,与父组件的v-model
同步。- 适用于自定义表单组件,如输入框或选择器。
实际应用:
- 实时搜索框,输入时动态过滤列表。
- 表单编辑,同步用户输入到数据模型。
8. 实际应用场景
以下是模板语法和数据绑定的实际应用:
- 搜索框:使用
v-model
绑定输入,结合v-for
动态显示过滤结果。 - 动态导航:用
v-if
和v-show
根据用户权限显示菜单。 - 商品列表:用
v-for
渲染商品,结合v-bind
动态设置图片和价格。 - 交互按钮:用
v-on
响应用户点击,更新界面状态。
9. 最佳实践
实践 | 描述 |
---|---|
使用简写语法 | 使用 : 代替 v-bind ,@ 代替 v-on ,提高代码简洁性。 |
提供唯一 key | 在 v-for 中始终使用 :key ,优先使用唯一 ID。 |
选择合适的条件渲染 | 频繁切换用 v-show ,不频繁用 v-if 。 |
避免 XSS 风险 | 仅对可信内容使用 v-html ,避免用户输入直接渲染。 |
优化双向绑定 | 在组件中使用 defineModel() (Vue 3.4+)简化 v-model 实现。 |
10. 2025 年趋势
截至 2025 年 5 月,Vue 3 是主流框架,Composition API 成为首选开发方式。defineModel()
(Vue 3.4+)简化了组件双向绑定,Vite 逐渐取代 Vue CLI 成为主流构建工具。模板语法和数据绑定仍是 Vue.js 的核心,广泛应用于动态 UI 开发。
11. 总结
本文详细介绍了 Vue.js 的模板语法和数据绑定,包括插值、指令、事件处理、条件渲染、列表渲染和双向绑定。通过这些技术,你可以轻松构建交互式界面。下一篇文章将探讨组件开发,包括定义、注册和通信,带你迈向模块化开发。
相关文章:
从零基础到最佳实践:Vue.js 系列(2/10):《模板语法与数据绑定》
Vue.js 模板语法与数据绑定:从基础到实践 关键点 Vue.js 的模板语法使用 HTML 结合特殊指令(如 v-bind、v-on),实现动态界面。插值({{ }})显示数据,指令控制 DOM 行为,双向绑定简化…...

iOS 使用 - 设置 来电震动/关闭震动
来电震动是一个很直观的老功能。但到了iOS 18,苹果却把震动功能的开关藏得越来越深,甚至分散在不同的菜单里,让用户难以找到。这里记录分享设置方法: 1. 震动开关的路径 设置 → 通用 → 辅助功能 → 触控 → 震动 2. 来电震动…...
anaconda、miniconda、conda的关系及miniconda安装
anaconda、miniconda、conda的关系及miniconda安装 文章目录 前言正文定义关系Linux安装miniconda新建一个python3.8环境 参考 前言 本文用于记录关于Anaconda、conda和Miniconda的定义及其关系的总结123: 正文 定义 conda 一个跨平台的开源包管理和环境管理工具…...

[C语言初阶]扫雷小游戏
目录 一、原理及问题分析二、代码实现2.1 分文件结构设计2.2 棋盘初始化与打印2.3 布置雷与排查雷2.4 游戏主流程实现 三、后期优化方向 在上一篇文章中,我们实现了我们的第二个游戏——三子棋小游戏。这次我们继续结合我们之前所学的所有内容,制作出我们…...

谷歌medgemma-27b-text-it医疗大模型论文速读:多语言大型语言模型医学问答基准测试MedExpQA
《MedExpQA: 多语言大型语言模型医学问答基准测试》论文解析 一、引言 论文开篇指出大型语言模型(LLMs)在医学领域的巨大潜力,尤其是在医学问答(QA)方面。尽管LLMs在医学执照考试等场景中取得了令人瞩目的成绩&#…...
Lambda表达式的高级用法
今天来分享下Java的Lambda表达式,以及它的高级用法。 使用它可以提高代码的简洁度,使代码更优雅。 一、什么是lambda表达式 Lambda 表达式是 Java 8 引入的特性,用于简化匿名内部类的语法,使代码更简洁,尤其在处理函…...
速盾(sudun):如何利用CDN技术实现页面加速?
随着互联网内容的爆炸式增长,用户对网页加载速度的要求也越来越高。快速加载的网页不仅能提升用户体验,还能直接影响搜索引擎排名和网站转化率。内容分发网络(CDN)作为一种有效的解决方案,通过在全球范围内部署多个高性…...

DeepSeek+白果AI论文:开启答辩PPT生成的「智能双引擎」时代
2025学术答辩革新:DeepSeek与白果AI论文的黄金协同方案 白果Ai论文,论文写作神器~ https://www.baiguoai.com/ 在学术答辩的「战场」上,「选题创新不足」「数据可视化低效」「PPT逻辑断裂」等痛点长期困扰研究者。DeepSeek与白果AI论文的深…...
Jest入门
快速入门 Jest中文文档 | Jest中文网 1.下载:npm install --save-dev jest 2.创建 sum.js 文件: function sum(a, b) { return a b; } module.exports sum; 3.创建sum.test.js 的文件 const sum require(./sum); test(adds 1 2 to equal 3,…...

SDC命令详解:使用set_logic_dc命令进行约束
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 set_logic_dc命令可以将当前设计中的输入端口为不关心(设置端口的driven_by_dont_care属性为true),该端口在综合是可以被认为是…...

小程序涉及提供提供文本深度合成技术,请补充选择:深度合成-AI问答类目
一、问题描述 最近新项目AI咨询小程序审核上线,按照之前小程序的流程,之前审核,提示审核不通过,审核不通过的原因:小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务,请补充选择:深…...
SQL每日一练(2)
表: 产品表 p product_idproduct_name1产品 A2产品 B3产品 C 销售表 s sale_idproduct_idcountryamountsale_date11法国1000.002020-09-1522法国1500.002020-09-2033法国800.002020-09-1041英国1200.002020-09-2552英国1600.002020-09-0563英国900.002020-09-30…...

基于亚博K210开发板——lvgl 图形化实验
开发板 亚博K210开发板 实验目的 本次测试主要学习 K210 图形化操作界面的功能。 实验元件 LCD 显示屏、FT6236 触摸板 lvgl 图形化库简介 LVGL(轻度综合图形界面库)是一个免费开源图形库,具有使用方便,画面美观ÿ…...

LABVIEW 通过节点属性动态改变数值显示控件的方法
在 LabVIEW 里,能够借助属性节点来改变数值输入控件的禁用状态。下面为你介绍具体的操作步骤: 1. 创建或开启前面板 要先创建一个数值输入控件,操作方法是:点击 "控件" 选板,接着选择 "新式→数值→数…...

信息安全管理与评估2025上海卷
上海市“星光计划”第十一届职业院校技能大赛 (高职组) “信息安全管理与评估”赛项 任务书 一、 赛项时间共计4小时。二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备 配置防护 任务1 网络平台搭建 2…...
el-form 使用el-row el-col对齐 注意事项
1.el-form 使用inline,el-form-item宽度会失效。 2.为了保证el-form-item 和 它内部的el-input 能在一行,要设置el-form-item的label-width <el-form :model"editInspectform"><el-row style"margin-bottom: 20px"><…...
使用Terraform创建azure databrick
Azure Databricks 介绍 Azure Databricks是一种在Microsoft Azure云平台上运行的快速、易于使用的分析和大数据处理服务。它是基于Apache Spark的分析平台,可帮助用户以更高效的方式进行数据处理、数据分析和机器学习任务。Azure Databricks提供了一个协作式的工作环境,使数…...
Python爬虫开发基础案例:构建可复用的名言采集系统
一、项目背景与技术选型 1.1 爬虫技术应用场景 网络爬虫作为数据采集的核心技术,在舆情监控、价格比对、学术研究等领域发挥着重要作用。本案例选择quotes.toscrape.com作为目标网站,因其具有以下典型特征: 公开允许爬取的测试环境清晰的H…...
Spring Boot 中修改 HTTP 响应状态码(即 `response.status`)可以通过以下几种方式实现
以下是不同场景下的具体方法: 方法 1:直接使用 ResponseStatus 注解 在 Controller 方法或异常类上使用 ResponseStatus 注解,直接指定返回的状态码。 场景示例:固定返回指定状态码 import org.springframework.http.HttpStatu…...

Linux目录介绍+Redis部署(小白篇)
目录 👑Linux基础✨【目录】 👑Redis 安装1.下载压缩包2.解压3.安装编译环境4.安装到本地5.设置开机自启 👑Linux 自启服务 👑Linux基础 虽然在大二的时候学过Linux,但是很多基础知识都忘了,想再次从基础捡…...
软件开发MVC三层架构杂谈
在当今的软件开发领域,MVC(Model-View-Controller)架构已成为构建复杂系统时不可或缺的设计模式。它通过将应用程序划分为模型(Model)、视图(View)和控制器(Controller)三…...

Python 基础语法速查手册:从入门到精通
Python 作为最受欢迎的编程语言之一,以其简洁易读的语法和强大的功能吸引了大量开发者。本文全面汇总 Python 基础语法知识,帮助初学者快速掌握核心概念,并为后续深入学习打下坚实基础。 1. Python 基础语法结构 1.1 代码结构与缩进规则 Py…...
Spring框架--IOC技术
一、Spring框架的介绍 1、Spring框架的概述 Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003年兴起的一个轻量级的Java开发框架,由 Rod Jo…...
前端vue2-完全前端生成pdf->pdf-lib,html2canvas+jspdf,原生打印,三种方式(打印带有echarts图的pdf)
pdf-lib:优点是可以控制输出内容,缺点是麻烦 html2canvas:优点是直接把html页面转成图片之后插入pdf很方便,不用过多的代码,缺点是不好控制图片大小,容易被戒断,可以把想打印的内容藏在页面外面…...

论文阅读笔记——Emerging Properties in Unified Multimodal Pretraining
BAGEL 论文 商业闭源系统与学术/开源模型的差距很大,BAGEL 旨在通过开源统一架构大规模交错数据主要解决: 架构割裂:理解/生成分属两条网络,信息被压缩在少量条件 token 中,长上下文推理受限。数据贫乏:主…...

JAVA批量发送邮件(含excel内容)
EmailSenderHtmlV1 是读取配置文件《批量发送邮件.xlsx》,配置sheet获取 发件人邮箱 邮箱账号 口令,发送excel数据sheet获取收件人邮箱 抄送人邮箱 邮件标题 第N行开始(N>1,N0默认表头) 第M行结束(M>1,M0默认表头) 附件文件夹…...

Linux(Ubuntu)新建文件权限继承问题
当你在一个工作目权限为777的文件下,新建一个文件的时候,就有可能发生,新建的这个文件,权限和其他文件,或者工作目录不一致的问题,我们不可能每次新建一个文件,就要 sudo chmod -R 777 /PATH 所…...

Java中的String的常用方法用法总结
1.1 String (1)声明 (2)字符串常量 存储字符串数据的容器:private final char value[] 字符串常量都存储在字符串常量池(StringTable)中 字符串常量池不允许存放两个相同的字符串常量 ÿ…...

QGIS如何打开 ARCGIS的mxd工程文件
“SLYR”是一款由著名开源组织“北路开源”开发的一套QGIS兼容和转换ARCGIS样式、工程、设置信息的插件!其主要功能为: 最近项目需要,我使用了一些功能,发现其对中文环境及中文信息支持不太好,还有一些其它BUG…...

基于微信小程序的智能问卷调查系统设计与实现(源码+定制+解答)基于微信生态的问卷管理与数据分析系统设计
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...