第4集丨Vue 江湖 —— 计算属性
目录
- 一、基本使用
- 1.1 在computed中定义
- 1.1.1 案例
- 1.1.2 控制台调用getter
- 1.1.3 控制台中的data和computed
- 1.2 缓存效果
- 1.3 完整写法
- 1.3.1 案例
- 1.3.2 效果图
- 1.4 简写形式
- 二、案例的其他实现
- 2.1 methods实现
- 2.2 插值语法实现
- 三、体会计算属性的好处
- 3.1 复杂任务时
- 3.2 使用计算属性
- 3.3 computed vs methods
- 四、计算属性汇总
计算属性关键词: computed
。计算属性在处理一些复杂逻辑时是很有用的。
一、基本使用
1.1 在computed中定义
下面案例,在computed
中定义了一个计算属性,名为:fullName
,其所依赖的属性为:firstName
和 lastName
。
并且定义了getter
,如果getter
被调用,会打印出:get被调用了!
1.1.1 案例
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div>
</div>
<script>const vm = new Vue({el:'#root',data:{firstName: '小',lastName: '三'},computed:{fullName:{get() {console.log('get被调用了!');// console.log(this);return this.firstName+'-'+this.lastName}}}});</script>
1.1.2 控制台调用getter
打开控制台,输入vm
回车,会发现计算属性fullName
已经在vm
实例上了。并且会发现此时该属性的值,看不到,有三个点...
,点击才能看到,也就是getter
被调用了。
1.1.3 控制台中的data和computed
打开控制台,我们可以很方便的看到data
和computed
的属性
1.2 缓存效果
下面案例中,get
只会被调用一次,其余的会从缓存中读取。控制台只会打印出一次get被调用了!
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div>
</div>
<script>const vm = new Vue({el:'#root',data:{firstName: '小',lastName: '三'},computed:{fullName:{get() {console.log('get被调用了!');// console.log(this);return this.firstName+'-'+this.lastName}}}});</script>
1.3 完整写法
- 增加了
setter
的定义 - 通过
控制台
修改计算属性fullName
此时会看到setter
被调用了,并修改了所依赖的属性firstName
和lastName
。对于Vue
来讲,data
中的任何一个数据发生变化的时候,Vue
的模板都会重新解析一遍。因此,由于这两个属性发生了变化,其对应getter
就会被调用。
1.3.1 案例
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div><div class="row">全名:<span>{{fullName}}</span></div>
</div>
<script>const vm = new Vue({el:'#root',data:{firstName: '小',lastName: '三'},computed:{fullName:{get() {console.log('get被调用了!');// console.log(this);return this.firstName+'-'+this.lastName},set(value) {console.log('set',value);const arr = value.split("-");this.firstName = arr[0];this.lastName = arr[1];}}}});
</script>
1.3.2 效果图
我们在控制台中,输入vm.fullName='李-四'
回车,就会看到如下效果。
1.4 简写形式
计算属性
一般不做修改。如果只读不改,计算属性
就可以写成简写
的形式。这时不再是一个对象了,而是用函数代替且就为get
函数。
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div><div class="row">全名:<span>{{fullName}}</span></div>
</div><script>const vm = new Vue({el:'#root',data:{firstName: '小',lastName: '三'},computed:{fullName() {console.log('get被调用了!');return this.firstName+'-'+this.lastName}}});
</script>
二、案例的其他实现
2.1 methods实现
在methods
中定义了fullName
函数来实现
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div><div class="row">全名:<span>{{fullName()}}</span></div>
</div><script>const vm = new Vue({el:'#root',data() {// data中的任何一个数据发生变化的时候,Vue的模板都会重新解析一遍return {firstName: '小',lastName: '三'};},methods:{fullName(){// this就是vm实例// console.log(this);console.log("fullName函数被调用了!");return this.firstName+"-"+this.lastName;}}});
</script>
2.2 插值语法实现
通过直接在Vue
模板里拼接来实现
<div id="root"><div class="row">姓:<input type="text" v-model="firstName"></div><div class="row">名:<input type="text" v-model="lastName"></div><div class="row">全名:<span>{{firstName}}-{{lastName}}</span></div>
</div><script>const vm = new Vue({el:'#root',data() {return {firstName: '小',lastName: '三'};},});
</script>
三、体会计算属性的好处
3.1 复杂任务时
如下代码是反转字符串的例子,这个时候,模板变的很复杂,不容易看懂和理解。
<div id="app">{{ message.split('').reverse().join('') }}
</div>
3.2 使用计算属性
对于上述问题,我们使用计算属性
来解决。
<div id="app"><p>原始字符串: {{ message }}</p><p>计算后反转字符串: {{ reversedMessage }}</p>
</div><script>
var vm = new Vue({el: '#app',data: {message: 'Runoob!'},computed: {// 计算属性的 getterreversedMessage: function () {// `this` 指向 vm 实例return this.message.split('').reverse().join('')}}
})
</script>
3.3 computed vs methods
我们可以使用 methods
来替代 computed
,效果上两个都是一样的,但是 computed
是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods
,在重新渲染的时候,函数总会重新调用执行。
可以说使用 computed
性能会更好,但是如果你不希望缓存,你可以使用 methods
属性。
methods: {reversedMessage2: function () {return this.message.split('').reverse().join('')}
}
四、计算属性汇总
- 概念:所谓
计算属性
,就是要用的属性不存在,要通过已有的属性加工、计算生成一个全新的属性。对于Vue
来说,data
中配置的就是属性。计算属性
与data
中定义的属性分开。 - 原理:底层借助了
Object.defineProperty()
方法提供的getter
和setter
。 get
函数的作用
a. 当有程序读取计算属性
时,get
就会被调用,且返回值就作为计算属性
的值。即计算属性
是实时计算的属性。
b.Vue
做了缓存,当所依赖的数据没有发生变化,读取的时候会从缓存中取值。不会调用get
c.Vue
已经将get中this
维护好了,就是vm
实例get
函数什么时候执行?
a. 初次读取时会执行一次
b. 当依赖的数据发生变化时,会被再次调用set
函数什么时候调用?
a. 当计算属性
被修改时被调用- 优势:与
methods
实现相比,内部有缓存机制,效率更高,调试方便。 - 注意点
a.计算属性
最终会出现在vm
上,直接读取使用即可。
b. 如果计算属性
要被修改,那必须写set
函数去响应修改,且set
中要引起计算时依赖的数据发生改变。
c.计算属性
一般不做修改。这个时候,只读不改可以有简写
的形式,不再是一个对象了,而是用函数代替且就为get
函数。
相关文章:

第4集丨Vue 江湖 —— 计算属性
目录 一、基本使用1.1 在computed中定义1.1.1 案例1.1.2 控制台调用getter1.1.3 控制台中的data和computed 1.2 缓存效果1.3 完整写法1.3.1 案例1.3.2 效果图 1.4 简写形式 二、案例的其他实现2.1 methods实现2.2 插值语法实现 三、体会计算属性的好处3.1 复杂任务时3.2 使用计…...

Docker 容器化学习
文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…...

springboot第34集:ES 搜索,nginx
#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…...

微信小程序中的分包使用介绍
一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包:放置默认启动页面/TabBar 页面,公共资源/JS 脚本 分包:根据开发者的配置进行划分 限制:所有分包大小不超过 20M,单…...

【云原生】K8S二进制搭建二:部署CNI网络组件
目录 一、K8S提供三大接口1.1容器运行时接口CRI1.2云原生网络接口CNI1.3云原生存储接口CSI 二、Flannel网络插件2.1K8S中Pod网络通信2.2Overlay Network2.3VXLAN2.4Flannel 三、Flannel udp 模式的工作原理3.1ETCD 之 Flannel 提供说明 四、vxlan 模式4.1Flannel vxlan 模式的工…...
【iOS】—— 离屏渲染
文章目录 离屏渲染UIView和CALayer关系GPU屏幕渲染有两种方式:产生离屏渲染的原因:既然离屏渲染这么耗性能,为什么有这套机制呢?什么情况会离屏渲染?既然离屏渲染这么不好,为什么我们还要强制开启呢?如何避免离屏渲染?…...

基于人工智能的中医图像分类系统设计与实现
华佗AI 《支持中医,永远传承古老文化》 本存储库包含一个针对中药的人工智能图像分类系统。该项目的目标是通过输入图像准确识别和分类各种中草药和成分。 个人授权许可证 版权所有 2023至2050特此授予任何获得华佗AI应用程序(以下简称“软件”)副本的人免费许可,可根据以…...

spring security + oauth2 使用RedisTokenStore 以json格式存储
1.项目架构 2.自己对 TokenStore 的 redis实现 package com.enterprise.auth.config;import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis…...

css position: sticky;实现上下粘性布局,中间区域滚动
sticky主要解决的问题 1、使用absolute和fixed中间区域需要定义高度2、使用absolute和fixed底部需要写padding-bottom 避免列表被遮挡住一部分(底部是浮窗的时候,需要动态的现实隐藏) <!DOCTYPE html> <html lang"en"&…...

解密HTTP代理爬虫中的IP代理选择与管理策略
在当今数据驱动的世界中,HTTP代理爬虫作为一项重要的数据采集工具,其成功与否往往取决于IP代理的选择与管理策略。作为一家专业的HTTP代理产品供应商,我们深知IP代理在数据采集中的重要性。在本文中,我们将分享一些关于HTTP代理爬…...

pytorch入门
详细安装教程和环境配置可以看:Python深度学习:安装Anaconda、PyTorch(GPU版)库与PyCharm_哔哩哔哩_bilibili 跟学课程:B站我是土堆 pytorch中两个实用函数: dir():打开 help():说明书…...
Redis | 主从模式
Redis | 主从模式 1. 简介 Redis主从模式(Replication)是Redis提供的一种数据备份和高可用性解决方案。通过主从复制,可以将一个Redis服务器的数据复制到其他多个从服务器,从而实现数据的备份和读写分离,提高系统的性…...

C# Blazor 学习笔记(8):row/col布局开发
文章目录 前言相关文章代码row和col组件B_rowB_col结构 使用 前言 可能是我用的element ui和 uView这种第三方组件用的太多了。我上来就希望能使用这些组件。但是目前Blazor目前的生态其实并不完善,所以很多组件要我们自己写。 我们对组件的要求是 我们在组件化一共…...
金融供应链智能合约 -- 智能合约实例
前提 Ownable:监管者合约,有一个函数能转让监管者。 SupplyChainFin:供应链金融合约,银行、公司信息上链,公司和银行之间的转账。 发票:记录者交易双方和交易金额等的一种记录数据。如:我在超市买了一瓶水,超市给我开了一张发票。 Ownable // SPDX-…...

论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读
论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读 论文概况论文主要贡献Background & Motivation方法论单行为图神经网络(Behavior-aware GNN)多行为对比学习元对比编码模型训练 实验部分论文总结 论文概况 今…...

K8S 部署 RocketMQ
文章目录 添加模板部署本地访问 集群使用 kubesphere 作为工具 添加模板 添加 helm 模板 helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq helm repo update rocketmq-repo编写 value.yaml 文件 配置主从节点的个数,例子为单节点 broker:…...

[Docker]入门之docker-compose
一,Docker-compose简介 1,Docker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project),…...
SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据
SAP提供了标准的读取EXCEL的函数(ALSM_EXCEL_TO_INTERNAL_TABLE),但是此标准函数无法满足对同一EXCEL 进行不同SHEET的数据读取,一下方法就是教你如何通过修改程序来实现ALSM_EXCEL_TO_INTERNAL_TABLE读取多个SHEET; …...

Rust 编程小技巧摘选(6)
目录 Rust 编程小技巧(6) 1. 打印字符串 2. 重复打印字串 3. 自定义函数 4. 遍历动态数组 5. 遍历二维数组 6. 同时遍历索引和值 7. 迭代器方法的区别 8. for_each() 用法 9. 分离奇数和偶数 10. 判断素数(质数) Rust 编程小技巧(6) 1. 打印…...
如何保证Redis缓存和数据库的一致性问题
熟练掌握Redis缓存技术? 那么请问Redis缓存中有几种读写策略,又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 Cache Aside Pattern Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...