Vue 3 中使用 `<script setup>` 语法糖实现模板插值表达式

Vue 3 中使用 <script setup> 语法糖实现模板插值表达式

Vue 3 中的 <script setup> 语法糖让我们可以更直接地定义响应式数据和计算属性,从而在模板中使用插值表达式更加简洁。这种写法不需要手动 return 数据和方法,代码更加清晰。本文将详细介绍如何通过 <script setup> 语法糖实现插值表达式的各种用法。


一、什么是 <script setup>

<script setup> 是 Vue 3 中一种新的 <script> 标签形式,用来更简洁地编写组件的逻辑。通过 <script setup>,Vue 可以自动解析并暴露我们定义的变量、方法、计算属性等,使它们可以直接在模板中使用。

优势:

  • 更少的模板代码:无需手动 return 数据和方法。
  • 更清晰的逻辑:将数据和操作集中在一起,避免重复。
  • 编译性能提升:Vue 在编译时会优化 <script setup> 的代码,使渲染更加高效。

二、插值表达式的基本用法

1. 文本插值

插值表达式最基本的用法是展示文本信息。在 <script setup> 中使用 ref 定义响应式数据,然后在模板中使用 {{ }} 包裹变量即可展示文本。

示例:
<template><p>{{ message }}</p>
</template><script setup>
import { ref } from 'vue';const message = ref("Hello Vue 3 with script setup!");
</script>

在这里,我们使用 ref 创建了一个响应式变量 message,然后通过 {{ message }} 在模板中展示其值。如果 message 的值发生变化,Vue 会自动更新页面显示的内容。


2. JavaScript 表达式插值

插值表达式支持在 {{ }} 中直接使用 JavaScript 表达式,包括计算、三元运算符、字符串拼接等。

示例:
<template><p>{{ userName + ",欢迎回来!" }}</p><p>年龄:{{ age > 18 ? "成年" : "未成年" }}</p>
</template><script setup>
import { ref } from 'vue';const userName = ref("小明");
const age = ref(20);
</script>

在这个例子中,我们在 {{ }} 中直接使用了字符串拼接和三元运算符,使页面根据 userNameage 的值动态展示欢迎语句和年龄状态。


三、属性绑定(属性插值)

除了文本内容,插值表达式还可以用于 HTML 属性的动态绑定。通过 : 语法(或 v-bind),我们可以将数据绑定到 HTML 元素的属性上。

示例:

<template><img :src="imageUrl" alt="动态图片" /><a :href="websiteUrl">访问我的网站</a>
</template><script setup>
import { ref } from 'vue';const imageUrl = ref("https://example.com/image.jpg");
const websiteUrl = ref("https://example.com");
</script>

在这个示例中,:src="imageUrl" 会将 imageUrl 的值绑定到 <img> 元素的 src 属性。数据改变时,页面的图片也会自动更新。

组合绑定示例

在属性绑定中,我们还可以使用复杂的表达式来动态决定属性值,例如使用三元运算符来动态设置 CSS 类:

<template><button :class="isActive ? 'btn-active' : 'btn-inactive'">点击我</button>
</template><script setup>
import { ref } from 'vue';const isActive = ref(false);
</script>

isActivetrue 时,按钮的类名为 btn-active,否则为 btn-inactive。通过控制 isActive 的值,可以动态地改变按钮的样式。


四、计算属性与插值表达式

<script setup> 中,我们可以通过 computed 定义计算属性。计算属性会自动根据依赖的数据变化而重新计算,非常适合复杂的插值表达式需求。

示例:

<template><p>欢迎,{{ fullName }}</p>
</template><script setup>
import { ref, computed } from 'vue';const firstName = ref("张");
const lastName = ref("三");
const fullName = computed(() => `${firstName.value} ${lastName.value}`);
</script>

在这里,fullName 是一个计算属性,依赖于 firstNamelastName 的值。如果其中一个值发生变化,fullName 会自动更新并在视图中反映出来。


五、双向绑定与插值结合

Vue 3 支持通过 v-model 指令实现数据的双向绑定,常用于输入框和其他表单控件。我们可以结合插值表达式实现双向绑定的动态显示。

示例:

<template><input v-model="userInput" placeholder="请输入您的姓名" /><p>您输入的是:{{ userInput }}</p>
</template><script setup>
import { ref } from 'vue';const userInput = ref("");
</script>

在这个例子中,v-model="userInput" 实现了双向绑定。当用户在输入框中输入文字时,userInput 的值会实时更新,模板中的插值表达式 {{ userInput }} 也会相应变化。


六、方法定义和插值调用

<script setup> 中定义方法时,直接在模板中调用方法来展示动态数据或执行某些逻辑。

示例:

<template><p>当前时间:{{ getCurrentTime() }}</p><button @click="updateTime">刷新时间</button>
</template><script setup>
import { ref } from 'vue';const currentTime = ref(new Date().toLocaleTimeString());function getCurrentTime() {return currentTime.value;
}function updateTime() {currentTime.value = new Date().toLocaleTimeString();
}
</script>

在这个示例中,getCurrentTime() 函数返回当前时间字符串,而 updateTime() 则会在按钮点击时更新 currentTime,从而刷新页面显示的时间。


七、注意事项

  1. 避免复杂逻辑:在插值表达式中不要放置过于复杂的逻辑。如果需要,可以定义计算属性或方法来处理。
  2. 合理使用 refcomputed:使用 ref 来管理简单数据,使用 computed 处理依赖关系的值,使代码更加模块化。
  3. <script setup> 中避免 return<script setup> 会自动暴露定义的变量到模板中,无需手动 return
  4. 保持模板简洁:尽量避免在模板中写复杂的 JavaScript 表达式,可以在 <script setup> 中将复杂逻辑提取到计算属性或方法中。

总结

通过 Vue 3 的 <script setup> 语法糖,我们可以更简洁地在组件中定义响应式数据、计算属性和方法,使得插值表达式的使用更加高效和清晰。希望这篇教程能帮助你更好地理解和使用 Vue 3 的 <script setup> 进行模板插值表达式的开发。

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

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

相关文章

我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算

Gonzalez从集合角度定义膨胀和腐蚀&#xff0c;不易理解。 Through these definitions, you can interpret dilation and erosion as sliding neighborhood operations analogous to convolution (or spatial filtering). 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向…

力扣题目解析--合并两个链表

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff…

基于yolov8、yolov5的鸟类分类系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

css:浮动

网页的本质上就是摆放盒子&#xff0c;把盒子摆到相应的位置上 css提供了三种传统的布局方式&#xff1a; 普通流&#xff08;标准流&#xff09;&#xff1a;标签按默认方式排列&#xff0c;最基本的布局方式 浮动 定位 实际开发中&#xff0c;一个网页基本包含了三种这种布局…

Essential Cell Biology--Fifth Edition--Chapter one (6)

1.1.4.4 Internal Membranes Create Intracellular Compartments with Different Functions [细胞膜形成具有不同功能的细胞内隔室] 细胞核、线粒体和叶绿体并不是真核细胞中唯一的膜包围细胞器。细胞质中含有大量的[ a profusion of]其他细胞器&#xff0c;这些细胞器被单层膜…

量子奇异值阈值算法

特征值分解只适用于方阵&#xff0c;如何扩展到任意形状的矩阵呢&#xff1f;奇异值分解能够解决此问题。量子奇异值阈值算法在奇异值分解的基础上将小的特征值设置为0&#xff0c;从而将小的特征值及其对应的特征向量去掉&#xff0c;进而降低矩阵的秩&#xff0c;达到降维的目…

Python_爬虫3_Requests库网络爬虫实战(5个实例)

目录 实例1&#xff1a;京东商品页面的爬取 实例2&#xff1a;亚马逊商品页面的爬取 实例3&#xff1a;百度360搜索关键词提交 实例4&#xff1a;网络图片的爬取和存储 实例5&#xff1a;IP地址归地的自动查询 实例1&#xff1a;京东商品页面的爬取 import requests url …

黑马微项目

目录 1 飞机票 2 生成一个五位数验证码 3 数字加密 4 数字解密 5 抢红包 6 双色球系统 7 用户登录 8 金额转换 9 手机号屏蔽 10 罗马数字转换 11 调整字符串 12 初级学生管理系统&#xff08;学生数据的管理&#xff09; 13 学生管理系统&#xff08;用户的相关操…

基于lighthouse搭建私有网盘Cloudreve【开源应用实践】

基于lighthouse搭建私有网盘Cloudreve【超高性价比】 今天给大家分享一款私人网盘神器&#xff0c;既能存放你的文件文档&#xff0c;也能替你保存那不可告人的秘密~ 香菇今天将手把手教给大家如何在腾讯云轻量应用服务器上搭建个人专属网盘 1. 既爱又恨的网盘存储 很多小伙伴…

博物馆实景复刻:开启沉浸式文化体验的新篇章

随着数字化技术的飞速发展&#xff0c;博物馆的展览形式正在经历一场前所未有的变革。3数字博物馆和3D线上展览&#xff0c;这种创新的展览方式不仅打破了时间和空间的限制&#xff0c;更让文化遗产的保护与传承迈上了一个新的台阶。 本文将深入探讨博物馆实景复刻虚拟展厅的兴…

java中设计模式的使用(持续更新中)

概述 设计模式的目的&#xff1a;编写软件过程中&#xff0c;程序员面临着来自耦合性&#xff0c;内聚性以及可维护性&#xff0c;可扩展性&#xff0c;重用性&#xff0c;灵活性等多方面的挑战&#xff0c;设计模式是为了让程序&#xff08;软件&#xff09;&#xff0c;具有…

linux基础io重定向

文章目录 目录 文章目录 前言 一、函数的认识 1、认识close函数和dup2函数 1、close函数&#xff1a; ​编辑 2、write、read函数 1、write函数 2、read函数 二、重定向 1.引入函数dup2 ​编辑 2、输出重定向 3.输出重定向 三、myshell重定向 总结 前言 接上一篇&#xff0c;…

[STM32] 定时器应用之输出比较 (五)

文章目录 1.输出比较2.PWM 介绍3.配置PWM 1.输出比较 OC: 输出比较。 输出比较可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形。每个高级定时器和通用定时器都拥有4个输出比较通道高级定…

【计算机毕设】无查重 基于python豆瓣电影评论舆情数据可视化系统(完整系统源码+数据库+开发笔记+详细部署教程)✅

目录 【计算机毕设】无查重 基于python豆瓣电影数据可视化系统&#xff08;完整系统源码数据库开发笔记详细部署教程&#xff09;✅ 一、项目背景 二、项目目标 三、项目功能 四、开发技术介绍 五、数据库设计 六、项目展示 七、开发笔记 八、启动步骤文档 九、权威教…

后台管理系统窗体程序:个人中心

目录 个人中心的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;修改按钮 &#xff08;2&#xff09;页面的进入退出操作 一、网页设计 二、html代码 三、css代码 四、js代码 本次项目为后台管理系统&#xff0c;在本系统内的第七…

PLC如何支持GEM300标准?SECS/GEM通讯协议

1. 提供技术服务&#xff0c;保证户使用没问题 2. 支持市场所有的常规PLC 3. 支持常规组态软件&#xff0c;如wincc、组态王、组态屏等 4. 支持各类传感器&#xff0c;私有协议、modbus、web等 5. 无需二次开发&#xff0c;只需配置映射到已有的PLC地址 GEM300协议是为了满…

用 Google Sheets 表格增强 Tableau 数据分析的 3 种玩法

轻松实现文本翻译、网页数据抓取&#xff0c;甚至创建高级日期表来增强 Tableau 可视化效果&#xff01; 作为一款强大的数据可视化工具&#xff0c;Tableau 的可视化能力毋庸置疑。然而&#xff0c;对于跟表格打交道的用户来说&#xff0c;它没有“创建表格”的功能&#xff0…

计算机网络 (3)计算机网络的性能

一、计算机网络性能指标 速率&#xff1a; 速率是计算机网络中最重要的性能指标之一&#xff0c;它指的是数据的传送速率&#xff0c;也称为数据率&#xff08;Data Rate&#xff09;或比特率&#xff08;Bit Rate&#xff09;。速率的单位是比特/秒&#xff08;bit/s&#xff…

CAP与BASE分布式理论

CAP理论 C&#xff1a;Consistency 一致性&#xff1a;指强一致性&#xff0c;分布式系统中的所有节点在同一时刻具有同样的值、都是最新的数据副本&#xff0c;一致性保证了不管向哪台服务器写入数据&#xff0c;其他的服务器能实时同步数据 强一致性&#xff1a;写入数据的时…

【Java基础知识系列】之Java类的初始化顺序

前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…