Vue.js教程之计算属性


Posted in Javascript onNovember 11, 2016

Vue.js 的内联表达式非常方便,但它最合适的使用场景是简单的布尔操作或字符串拼接。如果涉及更复杂的逻辑,你应该使用计算属性。

计算属性是用来声明式的描述一个值依赖了其它的值。当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM。这个功能非常强大,它可以让你的代码更加声明式、数据驱动并且易于维护。

通常情况下,使用计算属性会比使用过程式的$watch回调更合适。比如下面的例子:

<div id="demo">{{fullName}}</div>
var vm = new Vue({
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
}
})
vm.$watch('firstName', function (val) {
this.fullName = val + ' ' + this.lastName
})
vm.$watch('lastName', function (val) {
this.fullName = this.firstName + ' ' + val
})

上面的代码是过程式的,并且比较笨重。对比一下计算属性的版本:

var vm = new Vue({
el:'#demo',
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})

是不是感觉好多了?另外,你还可以为计算属性提供一个 setter:

computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}

计算属性缓存

在 0.12.8 之前,计算属性仅仅体现为一个取值的行为 —— 每次你访问它的时候,getter 都会重新求值。在 0.12.8 中对此做了改进 —— 计算属性的值会被缓存,只有在其某个反应依赖改变才会重新计算。

设想我们有一个开销很大的计算属性 A,它需要循环一个大数组并且完成很多运算。并且我们还有一个依赖 A 的计算属性。如果没有缓存,我们对 A 的 getter 不必要的过度调用就会导致潜在的性能问题。而有了缓存,A 的值会被缓存起来,除非其依赖发生了变化,这样访问它再多次也不会导致大量的不必要运算了。

然而,我们还是应该理解什么会被视为“反应式依赖”:

var vm = new Vue({
data: {
msg: 'hi'
},
computed: {
example: {
return Date.now() + this.msg
}
}
})

在上面的例子中,计算属性依赖 vm.msg。因为这是一个在 Vue 实例中被观察的数据属性,那么它就被视为了一个反应式依赖。无论何时 vm.msg 改变,vm.example 的值都会被重新计算。
然而,Date.now()并不是反应式依赖,因为它没有和 Vue 的数据观察系统发生任何关系。因此,当你在程序中访问vm.example时,你会发现除非vm.msg触发了一次重新计算,否则时间戳始终是相同的值。

有的时候你需要保留简单获取数据的模式,每次你访问 vm.example 的时候都希望触发重新计算。从 0.12.11 开始,你可以为一个特殊的计算属性开关缓存支持:

computed: {
example: {
cache: false,
get: function () {
return Date.now() + this.msg
}
}
}

现在,每次你访问 vm.example 的时候,时间戳都会及时更新。然而,要注意这只发生在 JavaScript 程序内部访问的时候,数据绑定还是依赖驱动的。当你在模板中绑定一个 {{example}} 的计算属性时,DOM 只会在反应式依赖改变时才会更新。

以上所述是小编给大家介绍的Vue.js教程之计算属性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
fancybox modal的完美解决(右上的X)
Oct 30 Javascript
Jquery chosen动态设置值实例介绍
Aug 08 Javascript
一个简单的全屏图片上下打开显示网页效果示例
Jul 08 Javascript
ajax图片上传,图片异步上传,更新实例
Dec 30 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
vue里使用create, mounted调用方法
Apr 26 Vue.js
JS控制TreeView的结点选择
Nov 11 #Javascript
node+express制作爬虫教程
Nov 11 #Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 #Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 #Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 #Javascript
通过扫描二维码打开app的实现代码
Nov 10 #Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 #Javascript
You might like
第五节 克隆 [5]
2006/10/09 PHP
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python Queue模块详解
2014/11/30 Python
Python实现栈的方法
2015/05/26 Python
python计算auc指标实例
2017/07/13 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Python之列表实现栈的工作功能
2019/01/28 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
自考毕业生自我鉴定
2013/11/04 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
电影开国大典观后感
2015/06/04 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技