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模仿苹果桌面的Dock效果(初级版)
Oct 15 Javascript
jquery ajax方式直接提交整个表单核心代码
Aug 15 Javascript
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
AngularJS extend用法详解及实例代码
Nov 15 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
Apr 13 jQuery
详解Angular2 之 结构型指令
Jun 21 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 jQuery
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
详解基于 Node.js 的轻量级云函数功能实现
Jul 08 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数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python破解zip加密文件的方法
2018/05/31 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
关于python中的xpath解析定位
2020/03/06 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
毕业生就业意向书
2014/04/01 职场文书
科学发展观演讲稿
2014/09/11 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
维稳工作承诺书
2015/01/20 职场文书
通知函的格式
2015/04/27 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python