vue.js入门教程之计算属性


Posted in Javascript onSeptember 01, 2016

前言

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

模板中表达式非常便利,但是它们实际上只用于简单的操作。

模板是为了描述视图的结构,在模板中放入太多的逻辑会让模板过重且难以维护。

这就是为什么 Vue.js 将绑定表达式限制为一个表达式,

如果需要多于一个表达式的逻辑,应当使用计算属性。

来看这一个简单的例子

<div id="example">
 a={{ a }}, b={{ b }}
</div>

var vm = new Vue({ //之所以起名vm,是因为这其实是mvvm中的vm
 el: '#example',
 data: {
 a: 1
 },
 computed: {
 // 一个计算属性的 getter
 b: function () {
  // `this` 指向 vm 实例
  return this.a + 1
 }
 }
})

输出结果:

a=1,b=2

这里我们声明了一个计算属性 b。我们提供的函数将用作属性 vm.b的 getter。

console.log(vm.b) // -> 2
vm.a = 3
console.log(vm.b) // -> 3

你可以像绑定普通属性一样在模板中绑定计算属性。Vue 知道 vm.b 依赖于 vm.a,因此当 vm.a 发生改变时,依赖于 vm.b 的绑定也会更新。而且最妙的是我们是声明式地创建这种依赖关系:计算属性的 getter 是干净无副作用的,因此也是易于测试和理解的。

如果你想观察 Vue 实例上的数据变动,可以使用Vue.js 提供的一个方法 $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
})

不过上面的方法也可以使用computed实现:

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

这样写是不是更简单,没有多余的重复代码,官方也鼓励使用computed方法。

上面讲computed时,有提到该方法提供了默认的get方法,那么有没有set方法呢?

// ...
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]
 }
 }
}
// ...

如果我们调用 vm.fullName = 'John Doe'时,setter 就会被调用。vm.firstNamevm.lastName也会有相应更新。这个方法,在有些时候是很有用的。

总结

以上就是关于vue.js计算属性的全部内容,希望这篇文章对大家能有所帮助,小编还会陆续更新关于vue.js的内容,感兴趣的小伙伴们可以继续关注三水点靠木。

Javascript 相关文章推荐
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
js仿苹果iwatch外观的计时器代码分享
Aug 26 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 Javascript
AngularJs expression详解及简单示例
Sep 01 #Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 #Javascript
vue.js入门教程之基础语法小结
Sep 01 #Javascript
AngularJs directive详解及示例代码
Sep 01 #Javascript
AngularJs concepts详解及示例代码
Sep 01 #Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
Sep 01 #Javascript
AngularJs html compiler详解及示例代码
Sep 01 #Javascript
You might like
Yii rules常用规则示例
2016/03/15 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
django如何通过类视图使用装饰器
2019/07/24 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
小小的船教学反思
2014/02/21 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2015年元旦标语大全
2014/12/09 职场文书
音乐教师个人总结
2015/02/06 职场文书
2015年教学工作总结
2015/04/02 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
如何撰写创业策划书
2019/06/27 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python