vue文本插值

好的,我们来详细讲解 Vue 中最基础的数据展示方式:文本插值和在其内部使用的 JavaScript 表达式

1. 文本插值 (Text Interpolation)

知识点:
文本插值是 Vue 中最基本的数据绑定形式。它使用“Mustache”语法(双大括号 {{ }})将数据直接渲染到 HTML 的文本内容中。

  • 核心作用: 将 Vue 实例中 setup 函数返回的数据,动态地显示在页面的指定位置。
  • 响应式: 当大括号内所依赖的数据发生变化时,插值所在的部分会自动更新,以反映最新的数据。这正是 Vue 响应式系统的核心体现。
  • 纯文本: 插值会将其内容作为纯文本来处理,而不是 HTML。如果你想渲染 HTML,需要使用我们之前讨论过的 v-html 指令。

2. JavaScript 表达式 (JavaScript Expressions)

知识点:
双大括号 {{ }} 内部不仅仅能放一个简单的变量名,它还支持单个 JavaScript 表达式。这意味着你可以在里面进行计算、调用方法或执行简单的逻辑判断。

Vue 对这里的表达式有明确的限制:

  • 必须是表达式 (Expression): 一个表达式是任何可以产生一个值的代码片段。例如 user.namecount + 1isOk ? '是' : '否'
  • 不能是语句 (Statement): 语句是执行操作但不一定返回值。例如 let a = 1if (x > 1) { ... }for (...) 都是语句,它们在插值中是无效的
  • 访问限制: 表达式只能访问在 setup 中返回的属性、全局白名单内的对象(如 MathDate)和一些 Vue 内置的辅助函数。你不能访问自己定义的全局变量。

示例代码

下面是一个完整的 HTML 文件,演示了文本插值和各种合法的 JavaScript 表达式。

你可以将此代码保存为 .html 文件,并在浏览器中打开查看效果。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue 3 文本插值与表达式 (CDN)</title><style>body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; padding: 20px; font-size: 1.1rem; }#app { max-width: 700px; margin: 0 auto; padding: 25px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }.demo-section { padding: 15px; border: 1px solid #e0e0e0; border-radius: 5px; margin-bottom: 20px; }.demo-section h3 { margin-top: 0; color: #42b883; }code { background-color: #f0f0f0; padding: 2px 5px; border-radius: 3px; }.note { color: #d9534f; font-size: 0.9em; margin-top: 10px; }</style>
</head>
<body><div id="app"><h1>文本插值 ({{ }}) 与表达式</h1><div class="demo-section"><h3>1. 基本用法</h3><p>欢迎, {{ username }}!</p></div><div class="demo-section"><h3>2. 算术运算</h3><p>商品单价: {{ price }} 元</p><p>商品数量: {{ quantity }}</p><p>总价: <strong>{{ price * quantity }}</strong></p></div><div class="demo-section"><h3>3. 访问对象属性</h3><p>用户信息: {{ user.name }} ({{ user.email }})</p></div><div class="demo-section"><h3>4. 使用方法调用</h3><p>姓名倒序: <strong>{{ reverseName(user.name) }}</strong></p></div><div class="demo-section"><h3>5. 使用三元运算符</h3><p>账户状态: <span :style="{ color: isActive ? 'green' : 'red' }">{{ isActive ? '已激活' : '未激活' }}</span></p></div><div class="demo-section"><h3>6. 复杂的表达式 (但保持简洁)</h3><p>格式化消息: <code>{{ message.toUpperCase().split('').reverse().join('') }}</code></p></div><div class="demo-section"><h3>7. 无效的用法 (语句)</h3><p>下面的代码在 Vue 模板中会报错,这里仅作说明:</p><ul><li><code>{{ let a = 1 }}</code> (这是声明语句)</li><li><code>{{ if (isActive) { return 'Active' } }}</code> (这是流控制语句)</li></ul><p class="note">注意:你不能在 `{{ }}` 中使用 `if/else`,但可以使用三元运算符 `( ? : )` 来实现类似的效果。</p></div></div><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><script>const { createApp, ref, reactive } = Vue;const app = createApp({setup() {// 1. 基本数据const username = ref('张三');// 2. 用于算术运算的数据const price = ref(15);const quantity = ref(3);// 3. 对象数据const user = reactive({name: '李四',email: 'lisi@example.com'});// 4. 定义一个方法const reverseName = (name) => {return name.split('').reverse().join('');};// 5. 用于三元运算符的数据const isActive = ref(true);// 6. 用于复杂表达式的数据const message = ref('Hello Vue');// 将所有需要被模板访问的数据和方法返回return {username,price,quantity,user,reverseName,isActive,message};}});app.mount('#app');
</script></body>
</html>

总结

分类示例描述
基础变量{{ myData }}直接显示 setup 中返回的 myData 的值。
算术运算{{ count + 1 }}可以执行加减乘除等数学计算。
对象属性访问{{ user.name }}可以访问对象的深层属性。
方法调用{{ formatPrice(price) }}可以调用 setup 中返回的方法,并传入参数。
三元表达式{{ isVisible ? '显示' : '隐藏' }}if-else 在模板中最常见的替代方案。
其他表达式{{ message.split('').reverse().join('') }}任何能返回一个值的 JS 表达式链都是有效的。

最佳实践:虽然模板中支持复杂的表达式,但为了保持模板的声明性可读性,推荐将过于复杂的逻辑封装在方法计算属性computed property)中。这样可以让模板代码更清晰、更易于维护。

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

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

相关文章

Python:线性代数,向量内积谐音记忆。

目录1 先说结论2 解释3 欢迎纠错4 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、…

小程序导航设置更多内容的实现方法

在小程序中实现导航栏设置更多内容&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 使用原生导航栏自定义按钮 javascript // app.json 或页面.json中配置 {"navigationBarTitleText": "首页","navigationBarTextStyle": "black&q…

SpringBoot 解决配置文件有黄色波浪线

在application.properties配置文件中有黄色波浪线&#xff0c;是警告!! 原因&#xff1a;编码格式不一致&#xff01;&#xff01; 解决&#xff1a;Settings| Editor | File Encodings | 选择UTF-8

在 Vue 3 中全局使用 Suspense 组件

Suspense 是 Vue 3 引入的一个内置组件&#xff0c;不需要引用可以直接用。用于处理异步依赖的等待状态。虽然 Suspense 主要用于异步组件&#xff0c;但你也可以全局地使用它来管理整个应用的加载状态。 全局 Suspense 的基本用法 1. 在根组件中使用 Suspense // main.js 或…

笔记/计算机网络

Content 计算机网络部分核心概念十大网络协议一览 计算机网络部分核心概念 1. 什么是计算机网络&#xff1f;它最基本的功能是什么&#xff1f; 计算机网络是指通过某种传输介质将多台独立的计算机或设备连接起来&#xff0c;实现数据交换和资源共享的系统。其最基本的功能是数…

时频图数据集更正程序,去除坐标轴白边及调整对应的标签值

当数据集是时频图时可能有一个尴尬的问题&#xff0c;就是数据集制作好后&#xff0c;发现有白边。 其实这也不影响训练模型&#xff0c;可能对模型训练效果的影响也是微乎其微的&#xff0c;于是大多数情况我会选择直接用整张图片训练模型。但是&#xff0c;有的情况下&#x…

mv重命名报错:bash:未预期的符号 ‘(‘附近有语法错误

文章目录 一、报错背景二、解决方法2.1、方法一&#xff1a;文件名加引号2.2、方法二&#xff1a;特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下&#xff1a; aa &#xff08;1).txt执行命令及报错如下…

Unity-MMORPG内容笔记-其三

继续之前的内容&#xff1a; 战斗系统 无需多言&#xff0c;整个项目中最复杂的部分&#xff0c;也是代码量最大的部分。 属性系统 首先我们要定义一系列属性&#xff0c;毕竟所谓的战斗就是不断地扣血对吧。 属性系统是战斗系统的核心模块&#xff0c;负责管理角色的所有…

Linux入门篇学习——Linux 帮助手册

目录 一、Linux 帮助手册 1.怎么打开帮助手册 2.安装依赖 3.使用手册查看命令 一、Linux 帮助手册 1.怎么打开帮助手册 打开 ubuntu &#xff0c;输入 man 命令打开帮助手册&#xff0c;直接在控制台输入 man 就可以了&#xff0c; man 手册一共有 9 页&#xff0c…

2025年后端主流框架对比和竞争格局及趋势发展

2025年的后端开发呈现出云原生主导、性能革命、AI深度融合的技术格局&#xff0c;主流框架在细分领域持续分化&#xff0c;新兴技术快速渗透关键场景。以下是基于行业实践与技术演进的深度解析&#xff1a; 一、主流框架竞争态势与核心能力 1. Java生态&#xff1a;企业级市场的…

bRPC简介

bRPC基础介绍。 什么是RPC? 互联网上的机器大都通过TCP/IP协议相互访问&#xff0c;但TCP/IP只是往远端发送了一段二进制数据&#xff0c;为了建立服务还有很多问题需要抽象&#xff1a; 数据以什么格式传输&#xff1f;不同机器间&#xff0c;网络间可能是不同的字节序&am…

力扣网C语言编程题:在数组中查找目标值位置之二分查找法

一. 简介 上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下&#xff1a; 力扣网C语言编程题&#xff1a;在数组中查找目标值位置之暴力解法-CSDN博客 本文使用二分查找法进行实现&#xff0c;因为二分查找法符合题目要求&#xff0…

前端查询条件加密传输方案(SM2加解密)

一、需求背景 控台项目甲方进行安全测试&#xff0c;测试报告其中一条&#xff1a;敏感信息明文传输 1 敏感信息明文传输 中危 查询接口传输手机号、银行卡号等敏感信息时未加密/脱敏处理。 二、解决方案 讨论出的方案是通过前端查询条件加密&#xff0c;后端对加密的…

【Python】Flask网页

Flask第三方库安装命令&#xff1a;pip install flask代码&#xff1a;from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

数字资产革命中的信任之锚:RWA法律架构的隐形密码

首席数据官高鹏团队律师创作&#xff0c;AI辅助 在数字经济的浪潮中&#xff0c;资产的边界正在被重新定义。当一块地产、一笔应收账款、甚至一份碳配额被转化为链上的数字代币时&#xff0c;技术的光芒固然耀眼&#xff0c;但真正决定其生命力的&#xff0c;是背后隐匿的“信…

mobaxterm终端sqlplus乱码问题解决

背景。使用mobaxterm终端连接linux。在查询数据库表注释时发现**&#xff1f;**中文乱码。影响对表的分析。完成以下三个编码设置再打开sqlplus查询含中文的数据就正常了 总结。需要查看sqlplus的编码是什么 SELECT parameter, value FROM nls_database_parameters WHERE pa…

一个简单的分布式追踪系统

1. 准备工作 导入必要的库 import contextvars import time from typing import Any, Optional, Dict, List, Union from dataclasses import dataclass, field2. 定义上下文变量 # 定义两个上下文变量&#xff0c;存储当前 Span 和 Trace _current_span: contextvars.Conte…

【Qt】事件处理、事件分发器、事件过滤器

事件处理 一. 事件事件处理鼠标事件处理按键事件处理定时器事件处理窗口事件处理 二. 事件分发器三. 事件过滤器 虽然 Qt 是跨平台的 C 开发框架&#xff0c;Qt 的很多能力其实是操作系统提供的&#xff0c;只不过 Qt 封装了系统 API&#xff0c;程序是运行在操作系统上的&…

广东省省考备考(第三十八天7.4)——言语理解:逻辑填空(题目训练)

错题解析 本题可从第二空入手&#xff0c;横线处搭配“理论”&#xff0c;且根据“使得”可知&#xff0c;横线处与前文构成因果关系&#xff0c;即“遗传学的空白和古生物证据的缺乏”导致他的理论在某些方面存在不足&#xff0c;A项“捉襟见肘”指拉一拉衣襟&#xff0c;就露…

5G网络切片技术

5G中的网络切片技术是一种通过虚拟化将单一物理网络划分为多个独立、可定制的虚拟网络的技术&#xff0c;旨在满足不同应用场景对网络性能、带宽、时延等需求的差异化要求。以下从技术原理、核心价值、应用场景、实现方式及未来趋势五个维度展开分析&#xff1a;一、技术原理&a…