下面是本文的屏幕录像的在线视频:

温馨提示:

1、视频下载:线上视频被压缩处理,可以下载高清版本:

链接:https://pan.baidu.com/s/1MiGKmrzp40i1ZD_4borteQ 提取码:wc59

2、示例代码:https://pan.baidu.com/s/1rCqbY_j35FcRWRZbuOfHqg 提取码:79kh

下图是文章大纲:

一、概述

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的在模板中放入太多的逻辑会让模板过重且难以维护。例如:

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量message的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。
所以,对于任何复杂逻辑,你都应当使用计算属性。

二、基础例子

如下代码所示,是计算属性的几个基本的示例代码。

示例代码:01-Overview.html
访问该页面会返回如下的内容:

计算属性都以函数的形式写在Vue实例内的computed选项内,最终返回计算后的结果。
这里我们声明了一个计算属性reversedMessage。我们提供的函数将用作属性vm.reversedMessage的getter函数:

示例代码:01-Overview.html
你可以打开浏览器的控制台,自行修改例子中的vm.reversedMessage的值始终取决于vm.message的值
可以像绑定普通属性一样在模板中绑定计算属性。Vue知道vm.reversedMessage依赖于vm.message,因此当vm.message发生改变时,所有依赖vm.reversedMessage的绑定也会更新。而且最妙的是我们已经以声明的方式创建了这种依赖关系:计算属性的getter函数是没有副作用(side effect)的,这使它更易于测试和理解。

三、计算属性的访问器

计算属性默认只有getter,不过在需要时你也可以提供一个setter。如下代码所示:

示例代码:02-Setter.html
此处的代码给fullName的计算属性添加了get访问器和set访问器,分别用来获取属性值,和设置属性值的。上面的代码运行后,网页上显示的内容如下图所示:

可以看到,通过fullName计算属性将firstName和lastName的内容合并到了一起。并且,当firstName和lastName数据项中的任何一个发生改变,计算属性fullName也会自动同步改变。
接下来我们看下计算属性的set访问器是怎么运行的。将上述中注释的那行代码取消注释。如下图:

示例代码:02-Setter.html
做好上面的修改之后,再次打开页面,网页上显示的内容应该如下图所示:

这说明,我们可以给计算属性增加set访问器,并且可以通过该set访问器对原始的数据项进行修改。这样就算完整了!
绝大多数情况下,我们只会用默认的getter方法来读取一个计算属性,在业务中很少用到setter,所以在声明一个计算属性时,可以直接使用默认的写法,不必将getter和setter都声明。

四、计算属性缓存vs.方法

你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果。如下的代码所示:

示例代码:03-Method.html
我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要message还没有发生改变,多次访问reversedMessage计算属性会立即返回之前的计算结果,而不必再次执行函数。
这也同样意味着下面的计算属性将不再更新,因为Date.now()不是响应式依赖:

相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。
我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于A。如果没有缓存,我们将不可避免的多次执行A的getter!如果你不希望有缓存,请用方法来替代。
总结:如果希望使用缓存的机制以提升性能开销,则使用计算属性,否则就使用方法。

五、参考资料

  • https://v3.vuejs.org/guide/computed.html
  • https://cn.vuejs.org/v2/guide/computed.html
    书籍《Vue.js实战》第04章 v-bind及class与style绑定 第02节 绑定class的几种方式

光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第01节 计算属性相关推荐

  1. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第03节 计算属性的其他玩法

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1h600_BRR9O2Lr87zVQNgEw ...

  2. 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值

    下面是本文的屏幕录像的在线视频: 光脚丫思考Vue3与实战:第04章 模板语法 第01节 插值 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baid ...

  3. 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第02节 侦听器

    下面是本文的屏幕录像的在线视频: 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1qUekWio3fpWToT9PiECpEg ...

  4. 光脚丫思考Vue3与实战:第04章 模板语法 第03节 指令的修饰符

    下面是本文的屏幕录像的在线视频: 第03节 指令的修饰符 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1J08bPvs6OI ...

  5. 光脚丫思考Vue3与实战:第02章 安装Vue.js

    下面是本文的屏幕录像的在线视频: 02-安装Vue.js 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本:https://pan.baidu.com/s/16594YUpNNrkjZf ...

  6. 光脚丫思考Vue3与实战:第03章 Vue实例

    下面是本文的屏幕录像的在线视频: 03-Vue实例 04-生命周期示意图+钩子函数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 03-Vue实例:https://pan.baid ...

  7. 光脚丫思考Vue3与实战:第01章 初步认识Vue3

    下面是本文的屏幕录像的在线视频: 01-初步认识Vue.js-PART1 01-初步认识Vue.js-PART2 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: PART1:http ...

  8. 光脚丫思考Vue3与实战:第04章 模板语法 第04节 指令的缩写

    下面是本文的屏幕录像的在线视频: 第04节 指令的缩写 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/1Dd2HeUXH6DZ ...

  9. 光脚丫思考Vue3与实战:第04章 模板语法 第02节 指令的参数+动态参数

    下面是本文的屏幕录像的在线视频: 第02节 指令的参数+动态参数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/11_hwQF ...

最新文章

  1. IE下判断IE版本的语句
  2. “我来管管看”系列:如何提高生产计划的实际执行率?
  3. css二级菜单的隐藏与显示_具有二级菜单的导航案例
  4. hibernate 环境搭建测试
  5. 某高校刚入职的青年教师工资曝光!
  6. Python2.7本地安装numpy包
  7. 原型磨刀 开源一样的_晚餐也可以像开源一样
  8. KNN代码复现python版
  9. Pandas period_range
  10. 机器学习代码实战——KMeans(聚类)
  11. mysql connector net 6.9.5_mysql connector/net6.9.5 下载 - 51下载网
  12. 【转】Linux zip解压/压缩并指定目录
  13. 达尔豪斯大学计算机科学世界排名,最新达尔豪斯大学世界排名抢先看 QS世界大学排名TOP300...
  14. 在C#应用程序中嵌入暴风影音播放器
  15. Java 编程问题:九、函数式编程——深入研究
  16. ​杨利伟:在《太空一日》:我没有看到长城,但祖国的各个省份我大都看到了...
  17. phpqrcode简单在线二维码生成工具源码 非第三方接口
  18. 找呀找呀找朋友简谱用计算机弹,儿歌找朋友简谱_儿歌找朋友歌词歌谱
  19. Android自学之路,DrawerLayout must be measured with MeasureSpec.EXACTLY.错误
  20. NF5280M4 安装 Win2016 的方法

热门文章

  1. Keepalived_vrrp[15699]: (VI_1): ip address associated with VRID 51 not present in MASTER advert : ..
  2. Python Spider: 爬取项目外包网站TaskCity
  3. 抖音搬运次数过多 | 快手怎么检测原创的
  4. Python成长之路【第九篇】:Python基础之面向对象
  5. 利用selenium爬取boss直聘
  6. C语言初步-顺序结构-已知半径求圆的面积
  7. 车牌识别停车计费系统性能表现二 计费系统功能强大
  8. 华为鸿蒙智慧屏_华为鸿蒙系统到底什么样?荣耀智慧屏秀出答案
  9. 筑牢网络安全,联瑞电子为您的信息传输系“安全带”
  10. 几种常用的相对位置编码