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 相关文章推荐
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
Nov 28 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
jQuery中判断对象是否存在的方法汇总
Feb 24 Javascript
canvas实现手机端用来上传用户头像的代码
Oct 20 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
vue组件(全局,局部,动态加载组件)
Sep 02 Javascript
QT与javascript交互数据的实现
May 26 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
PHP批量删除jQuery操作
2017/07/23 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python语言元素知识点详解
2019/05/15 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python 求10个数的平均数实例
2019/12/16 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
工作中的自我评价如何写好
2013/10/28 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
租赁意向书范本
2014/04/01 职场文书
销售顾问工作计划书
2014/08/15 职场文书
煤矿安全协议书
2014/08/20 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
小学班主任个人总结
2015/03/03 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2015年班组长工作总结
2015/04/10 职场文书
简单的辞职信模板
2015/05/12 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
西安事变观后感
2015/06/12 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android