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 相关文章推荐
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
jQuery结合HTML5制作的爱心树表白动画
Feb 01 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
微信小程序实现滚动加载更多的代码
Dec 06 Javascript
Node.js API详解之 os模块用法实例分析
May 06 Javascript
如何制作自己的原生JavaScript路由
May 05 Javascript
详解TS数字分隔符和更严格的类属性检查
May 06 Javascript
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
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
短信提示使用 特效
2007/01/19 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
js中json处理总结之JSON.parse
2016/10/14 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
初中考试作弊检讨书
2014/02/01 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
中学生评语大全
2014/04/18 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
大学运动会加油稿
2015/07/22 职场文书
获奖感言一句话
2015/07/31 职场文书
高中数学教学反思范文
2016/02/18 职场文书