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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
仿百度的关键词匹配搜索示例
Sep 25 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
js简单网速测试方法完整实例
Dec 15 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
vue打包的时候自动将px转成rem的操作方法
Jun 20 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
vue transition 在子组件中失效的解决
Nov 12 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
Mar 02 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
YII Framework框架教程之安全方案详解
2016/03/14 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP 文件上传限制问题
2019/09/01 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
js几个验证函数代码
2010/03/25 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
三年级音乐教学反思
2014/01/28 职场文书
会计求职信
2014/05/29 职场文书
护士求职信
2014/07/05 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
承诺书范本
2015/01/21 职场文书
党员自我评价2015
2015/03/03 职场文书
人事任命通知书
2015/04/21 职场文书
python获取对象信息的实例详解
2021/07/07 Python