详解vue 计算属性与方法跟侦听器区别(面试考点)


Posted in Javascript onApril 23, 2018

计算属性

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

<div id="example">
 {{ message.split('').reverse().join('') }}
</div>

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中多次引用此处的翻转字符串时,就会更加难以处理。

所以,对于任何复杂逻辑,你都应当使用计算属性。

基础例子

<div id="app">
 {{fullName}}
</div>
  
  
var vm = new Vue({
 el: '#app',
 data: {
  firstName: "王",
  lastName: "小智",
  age: 28
 },
 // 计算属性
 computed: {
   fullName: function () {
     console.log("计算了一次")
     return this.firstName + " " + this.lastName
   }
 }
})

结果:

王小智

然后我们通过浏览器改变age属性的值,让页面重新渲染:

详解vue 计算属性与方法跟侦听器区别(面试考点)

大家可以看到,我们改变了age值计算属性的方法没有被调用,那如果计算属性的值发生了改变,如lastName或者firstName改变,打印结果又会怎么样呢?

详解vue 计算属性与方法跟侦听器区别(面试考点)

大家可以看到,当他依赖的发生变化的时候,计算属性会重新计算一次。

计算属性缓存 vs 方法

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

<p>Reversed message: "{{ fullName() }}"</p>


// 在组件中
methods: {
 fullName: function () {
  console.log("计算了一次")
  return this.firstName + " " + this.lastName;
 }
}

结果:

王小智

同样参照上面,我们通过浏览器改变age属性的值,让页面重新渲染:

详解vue 计算属性与方法跟侦听器区别(面试考点)

可以看出,我们页面只要重新渲染,方法都会执行一次,而计算属性只有在它的相关依赖发生改变时才会重新求值。

我们为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。

计算属性 vs 侦听属性

你可能已经注意到我们还可以通过侦听属性达到同样的效果:

var vm = new Vue({
 el: '#app',
 data: {
  firstName: "王",
  lastName: "小智",
  age: 28,
  fullName
 },
 // 计算属性
 watch: {
   firstName: function () {
    console.log("计算了一次");
    this.fullNmae = this.firstName + this.lastName;
   },
   lastName: function () {
    console.log("计算了一次")
    this.fullNmae = this.firstName + this.lastName;
   }
 }
})

结果:

王小智

同样参照上面,我们通过浏览器改变age属性的值,让页面重新渲染:

详解vue 计算属性与方法跟侦听器区别(面试考点)

大家可以看到,和fullname不相关的改变,fullName没有变化,跟计算属性类似,会有缓存,只有在它的相关依赖发生改变时才会重新求值,将它与计算属性的版本进行比较,好得多了,不是吗?

当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过
AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
JavaScript中的setMilliseconds()方法使用详解
Jun 11 Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
Oct 10 Javascript
基于layui实现高级搜索(筛选)功能
Jul 26 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 #Javascript
Node.js应用设置安全的沙箱环境
Apr 23 #Javascript
vue-devtools的安装步骤
Apr 23 #Javascript
使用Vue组件实现一个简单弹窗效果
Apr 23 #Javascript
深入理解JavaScript和TypeScript中的class
Apr 22 #Javascript
原生JS进行前后端同构
Apr 22 #Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 #Javascript
You might like
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
Python中类的继承代码实例
2014/10/28 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
分分钟入门python语言
2018/03/20 Python
python模块smtplib学习
2018/05/22 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python实现人民币大写转换
2018/06/20 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python 实现识别图片上的数字
2019/07/30 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Django 返回json数据的实现示例
2020/03/05 Python
python实现用户名密码校验
2020/03/18 Python
Python如何对XML 解析
2020/06/28 Python
python自动化办公操作PPT的实现
2021/02/05 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
婚前协议书
2014/04/15 职场文书
销售个人求职信范文
2014/04/28 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
复活读书笔记
2015/06/29 职场文书