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 相关文章推荐
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
Express之托管静态文件的方法
Jun 01 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
May 07 Javascript
layui数据表格重载实现往后台传参
Nov 15 Javascript
js实现上下左右键盘控制div移动
Jan 16 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 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/10/27 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
PyCharm 常用快捷键和设置方法
2017/12/20 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
澳大利亚网上书店:QBD
2021/01/09 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
大学生毕业自我鉴定
2013/11/06 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
趣味运动会开幕词
2015/01/28 职场文书
离职信范本
2015/06/23 职场文书
Python类方法总结讲解
2021/07/26 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers