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小数四舍五入多种方法实现
Dec 23 Javascript
Jquery实现Div上下移动示例
Apr 23 Javascript
jquery+css3打造一款ajax分页插件(自写)
Jun 18 Javascript
九种原生js动画效果
Nov 11 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
js实现简单的二级联动效果
Mar 09 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 Javascript
关于vue.js v-bind 的一些理解和思考
Jun 06 Javascript
微信小程序模板template简单用法示例
Dec 04 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下对字符串的递增运算代码
2010/08/21 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
Prototype Class对象学习
2009/07/19 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
python读取图片任意范围区域
2019/01/23 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
python中os包的用法
2020/06/01 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
大学生护理专业自荐信
2013/10/03 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
护士辞职信模板
2014/01/20 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
怎样写离婚协议书
2015/01/26 职场文书
总经理检讨书范文
2015/02/16 职场文书
通知范文怎么写
2015/04/16 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
MySQL 数据类型选择原则
2021/05/27 MySQL
详解Redis集群搭建的三种方式
2021/05/31 Redis
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
MySQL创建管理子分区
2022/04/13 MySQL