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 相关文章推荐
JavaScript国旗变换效果代码
Aug 13 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
JavaScript学习笔记之内置对象
Jan 22 Javascript
jQuery实现行文字链接提示效果的方法
Mar 10 Javascript
浅谈Cookie的生命周期问题
Aug 02 Javascript
javascript回调函数的概念理解与用法分析
May 27 Javascript
浅谈sass在vue注意的地方
Aug 10 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
微信小程序自定义底部弹出框动画
Nov 18 Javascript
vue实现图书管理系统
Dec 29 Vue.js
JavaScript仿京东轮播图效果
Feb 25 Javascript
JavaScript控制台的更多功能
Apr 28 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
我的论坛源代码(一)
2006/10/09 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
php计算整个目录大小的方法
2015/06/01 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
网站上面有这种切换效果
2006/06/26 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
python实现socket端口重定向示例
2014/02/10 Python
python决策树之CART分类回归树详解
2017/12/20 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Python 如何批量更新已安装的库
2020/05/26 Python
Django框架请求生命周期实现原理
2020/11/13 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
保安拾金不昧表扬信
2014/01/15 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
工程质检员岗位职责
2015/04/08 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL